使用安全cookie存储的JWT无状态登录:如何实现注销
JWT stateless sign-on with secure cookie storage : how to implement log out?
我开始使用Stormpath文章中描述的机制实现基于JWT的单点登录系统(用于同一域下的几个单页应用程序,例如app1.mydomain.com
, app2.mydomain.com
, auth.mydomain.com
)。
为了保护我的签名JWT令牌免受XSS攻击,我想将令牌存储在安全的(仅HTTPS)和仅http的cookie中。SPA本身将从响应体中获取用户信息。
我的主要问题是我们如何在JavaScript中实现"注销"功能,因为cookie是,按照设计,不能从JS代码访问?
我猜我将不得不做一个服务器调用,将过期的cookie。是否有一种纯客户端的方式来做到这一点?
最好的方法是按照用户JEY的建议在服务器端进行清理。
另外,我想在可能性上扩展位,所以它不适合注释。
在处理基于浏览器的应用程序时,选择令牌存储几乎是一个选择你的毒药游戏。如果使用安全的仅http cookie,则不必担心XSS漏洞导致令牌泄露。但是,由于其他一系列原因,您仍然必须确保不容易受到XSS的攻击。
这意味着你没有节省任何实际的工作,你只是有一种模糊的感觉,如果你被XSS攻击了,至少令牌是安全的。
另一方面,通过使用cookie, CSRF现在需要在您的雷达上,这是事情可能变得有趣的地方,一些防止CSRF的琐碎方法,如双重提交cookie,可以以这样的方式实现,它们实际上是无用的,例如在子域中存在可利用的XSS漏洞。
我并不是说在cookie中存储令牌是完全错误的,它不是,同样地,将它们存储在Web存储中也是可以接受的。在这两种情况下,你都需要了解你的选择的后果和每一个选择带来的可能性。
在这种情况下,Web存储将从客户端角度简化注销场景,因此您需要问自己哪一组优点和缺点更适合您的场景。
鉴于您提到了子域中的多个应用程序,需要注意的一件事是:
使用基于令牌的验证,您可以选择在哪里存储JWT。通常,JWT放在浏览器的本地存储中,这对于大多数用例都很有效。在本地存储中存储jwt需要注意一些问题。与cookie不同,本地存储被沙盒化到特定的域,其数据不能被任何其他域(包括子域)访问。
(重点是我的,来源:在哪里存储令牌? cookie vs Tokens:权威指南
(披露:我是Auth0工程师。)
- 如何使用动画实现纸张推车
- 客户端服务器REST API captcha实现
- 如何实现此布局
- Meteor忘记了密码的实现
- 使用Native Sockets在Android中实现WebSockets
- 在样板文件中实现Ajax
- instanceof是如何在JavaScript中实现的
- 如何正确实现Jquery多选小部件
- 实现一个建立在google.com之上的自定义搜索引擎
- 多个组件是如何实现的
- window.location使用jquery mobile实现chrome跳转
- 如何在OpenERP中实现网络摄像头
- 显示具有服务器端自动时间注销的同步倒计时计时器
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- javascript加密实现,包括可信否认
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 实现自动注销
- 如何简单地实现谷歌注销那种“点击任何地方关闭”类型的功能
- 使用安全cookie存储的JWT无状态登录:如何实现注销
- 实现web应用程序空闲超时(自动注销)的最佳方法是什么?