angularjs – 如何在仅HTTP的cookie中存储JWT令牌?
我创建了一个应用程序,它只使用服务器在正确登录凭据时发送的JWT,并在我的后端Express.js服务器上对任何/ api路由进行授权.
另一方面,AngularJS使用此令牌,将其存储在会话存储中,并且每次使用auth拦截器将令牌发送回服务器. 我最近才明白这种做法有多危险. 在这种情况下,我理解来回传递令牌的方法.但是,如果您希望将JWT存储在客户端Javascript无法读取的安全的,仅HTTP的cookie中,那么有人会非常善意地解释发生的方法吗? 例如:凭证成功 > cookie在服务器上创建, 我试图在这里获得一个关于它是如何工作的心智模型.如果我的理解是正确的,那么这样做就不再需要auth拦截器,因为在正确的凭证登录时,服务器将在cookie内完成所有的令牌传输. 解决方法
处理cookie具有公平的微妙之处,但在较高的层面上,cookie是您的Web服务器可以设置的一段数据,然后由用户的Web浏览器存储,并在以后的任何请求中发送回服务器.只要cookie有效且适用于正在进行的请求,浏览器就会生成相同的服务器.
(这就是为什么你不再需要使用Angular拦截器,因为它是确保cookie被发送的浏览器本身) 除了一些特殊标志选项,如仅HTTP,在更高级别,您可以将cookie设置为与给定域和路径相关联.例如,您的服务器可以设置cookie,以便以后只能由浏览器发送到/ api路径下发出的请求. 总结一下,cookie是HTTP的状态管理机制,有关更多详细信息,请参阅相关的RFC 2617. 相比之下,JWT只是一些具有众所周知的表示并遵循一些约定的数据.更具体地说,JWT由头部,有效载荷和签名部分组成,并且通常建议在大多数JWT用例中保持有效载荷的大小.有关详细信息,请参见Get Started with JSON Web Tokens. 如果您浏览上一篇文章,您会注意到JWT的最终表示形式是由点分隔的三个Base64url编码字符串.这特别令人感兴趣,因为它意味着JWT非常适合在HTTP中使用,包括作为cookie的值. 要记住的一点是,通过规范,您只能保证浏览器将支持每个cookie最多4096个字节的cookie(以cookie的名称,值和属性的长度总和来衡量).除非您存储令牌中的大量数据,否则您不应该遇到问题,但始终需要考虑.是的,您也可以将JWT令牌分解为多个cookie,但事情开始变得更加复杂. 此外,cookie有他们的到期概念,所以请记住,因为JWT本身,当在身份验证范围内使用时,也会有自己的到期概念. 最后,我只想解决一些关于将JWT存储在localStorage / sessionStorage中的问题.你是对的,如果你这样做,你必须理解它的含义,例如,与存储相关联的域中的任何Javascript代码都能够读取令牌.但是,仅HTTP的cookie也不是银弹.我会给以下文章读一读:Cookies vs Tokens: The Definitive Guide. 它侧重于传统会话标识符cookie与基于令牌的(JWT)身份验证系统之间的差异,名为Where to Store Tokens的部分?保证阅读,因为它解决了存储的安全相关方面. TL的摘要:DR人员:
(重点是我的) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |