加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何在仅HTTP的cookie中存储JWT令牌?

发布时间:2020-12-17 17:46:30 所属栏目:安全 来源:网络整理
导读:我创建了一个应用程序,它只使用服务器在正确登录凭据时发送的JWT,并在我的后端Express.js服务器上对任何/ api路由进行授权. 另一方面,AngularJS使用此令牌,将其存储在会话存储中,并且每次使用auth拦截器将令牌发送回服务器. 我最近才明白这种做法有多危险.
我创建了一个应用程序,它只使用服务器在正确登录凭据时发送的JWT,并在我的后端Express.js服务器上对任何/ api路由进行授权.

另一方面,AngularJS使用此令牌,将其存储在会话存储中,并且每次使用auth拦截器将令牌发送回服务器.

我最近才明白这种做法有多危险.

在这种情况下,我理解来回传递令牌的方法.但是,如果您希望将JWT存储在客户端Javascript无法读取的安全的,仅HTTP的cookie中,那么有人会非常善意地解释发生的方法吗?

例如:凭证成功

> cookie在服务器上创建,
>在cookie的同时创建一个JWT
>将JWT存储在名为token等的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人员:

Two of the most common attack vectors facing websites are Cross Site
Scripting (XSS) and Cross Site Request Forgery (XSRF or CSRF). Cross Site Scripting) attacks occur when an outside entity is able to execute code within your website or app. (…)

If an attacker can execute code on your domain,your JWT tokens (in local storage) are vulnerable. (…)

Cross Site Request Forgery attacks are not an issue if you are using JWT with local storage. On the other hand,if your use case requires you to store the JWT in a cookie,you will need to protect against XSRF.

(重点是我的)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读