什么更安全,HTTP会话中的JWT或客户端请求头中的JWT?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么更安全,HTTP会话中的JWT或客户端请求头中的JWT?相关的知识,希望对你有一定的参考价值。
我正在尝试在我的一个项目中实现基于JWT的身份验证系统,并且我在两个选项之间陷入困境,我需要一些澄清。我提出了两种实现JWT的方法,如下所示:
方法1
- 客户端发送登录凭据
- 服务器验证凭据
- 服务器生成两个令牌,auth-token和refresh-token
- 服务器将这些令牌存储到它的redis-server中,如[key] = refresh-token和[value] = auth-token
- 由于HTTP连接在客户端和服务器之间始终处于活动状态,因此服务器将auth-token设置为http-sessions并发送刷新令牌作为响应。
- 客户端将刷新令牌存储到本地浏览器存储中,并在客户端和服务器之间关闭http连接时使用它以重新获得身份验证。
- 此外,借助refresh-token,我们可以轻松刷新auth-token而无需注销用户。
方法2
- 客户端发送登录凭据
- 服务器验证凭据
- 服务器生成auth-token并发送以响应客户端
- 客户端在请求标头中为其向服务器发出的每个请求设置令牌
答案
这是一个很好的解释https://auth0.com/learn/refresh-tokens/
刷新令牌是长寿的。这意味着当客户端从服务器获取一个时,必须安全地存储此令牌以防止潜在攻击者使用它,因此,将它们存储在浏览器中是不安全的。如果刷新令牌泄露,它可用于获取新的访问令牌(并访问受保护的资源),直到它被列入黑名单。必须将刷新令牌发布到单个经过身份验证的客户端,以防止其他方使用泄露的令牌。访问令牌也必须保密,但由于其寿命较短,安全考虑因素并不重要。
会话也可能是劫持或固定。
如果您使用SSL,则所有标头都已加密。
所以我更喜欢原生的JWT机制,并且会注意客户端的auth令牌存储。
另一答案
以下是我的一些澄清,
- 在浏览器端存储长期存在的会话总是有风险的
- 让服务器执行验证第三方或应用程序发送的令牌的JOB。这样可以确保正在发送的令牌完整且有效。
- 我更喜欢总是通过HTTPS在标头中发送令牌的方法。这使得简单且更安全,因为服务器将验证您的令牌w.r.t到用户会话。
以上是关于什么更安全,HTTP会话中的JWT或客户端请求头中的JWT?的主要内容,如果未能解决你的问题,请参考以下文章