哪个更安全,HTTP 会话中的 JWT 还是客户端请求中的 JWT header?
What is more secure, JWT in HTTP sessions or JWT in client's request header?
我正在尝试在我的一个项目中实现基于 JWT 的身份验证系统,但我在两个选项之间徘徊,我需要一些说明。我想出了两种实现 JWT 的方法,如下所示:
方法一
- 客户端发送登录凭据
- 服务器验证凭据
- 服务器生成两个令牌,auth-token 和 refresh-token
- 服务器将这些令牌存储到它的 redis-server 中作为 [key]=refresh-token 和 [value]=auth-token
- 由于客户端和服务器之间的 HTTP 连接始终有效,服务器将 auth-token 设置为 http-sessions 并发送 refresh-token 作为响应。
- 客户端将 refresh-token 存储到本地浏览器存储中,并在客户端和服务器之间的 http 连接关闭时使用它来重新获得身份验证。
- 此外,在 refresh-token 的帮助下,我们可以轻松刷新 auth-token 而无需注销用户。
方法二
- 客户端发送登录凭据
- 服务器验证凭据
- 服务器生成auth-token并发送响应给客户端
- 客户端在请求中为它向服务器发出的每个请求header设置令牌
这个解释很好https://auth0.com/learn/refresh-tokens/
Refresh Tokens are long-lived. This means when a client gets one from
a server, this token must be stored securely to keep it from being
used by potential attackers, for this reason, it is not safe to store
them in the browser. If a Refresh Token is leaked, it may be used to
obtain new Access Tokens (and access protected resources) until it is
blacklisted. Refresh Tokens must be issued to a single authenticated
client to prevent the use of leaked tokens by other parties. Access
Tokens must also be kept secret, but due to its shorter life, security
considerations are less critical.
还有一个会话可能被劫持或固定。
如果您使用 SSL,所有 headers 都会被加密。
所以我会更喜欢原生的 JWT 机制,并且会注意客户端 auth 令牌的存储。
这是我的一些澄清,
- 在浏览器端存储长期存在的 session 总是有风险的
- 让服务器执行验证第三方或应用程序发送的令牌的工作。这是为了确保发送的令牌完整且有效。
- 我更喜欢始终通过 HTTPS 在 headers 中发送令牌的方法。这变得简单且更安全,因为服务器将向用户 session.
验证您的令牌 w.r.t
我正在尝试在我的一个项目中实现基于 JWT 的身份验证系统,但我在两个选项之间徘徊,我需要一些说明。我想出了两种实现 JWT 的方法,如下所示:
方法一
- 客户端发送登录凭据
- 服务器验证凭据
- 服务器生成两个令牌,auth-token 和 refresh-token
- 服务器将这些令牌存储到它的 redis-server 中作为 [key]=refresh-token 和 [value]=auth-token
- 由于客户端和服务器之间的 HTTP 连接始终有效,服务器将 auth-token 设置为 http-sessions 并发送 refresh-token 作为响应。
- 客户端将 refresh-token 存储到本地浏览器存储中,并在客户端和服务器之间的 http 连接关闭时使用它来重新获得身份验证。
- 此外,在 refresh-token 的帮助下,我们可以轻松刷新 auth-token 而无需注销用户。
方法二
- 客户端发送登录凭据
- 服务器验证凭据
- 服务器生成auth-token并发送响应给客户端
- 客户端在请求中为它向服务器发出的每个请求header设置令牌
这个解释很好https://auth0.com/learn/refresh-tokens/
Refresh Tokens are long-lived. This means when a client gets one from a server, this token must be stored securely to keep it from being used by potential attackers, for this reason, it is not safe to store them in the browser. If a Refresh Token is leaked, it may be used to obtain new Access Tokens (and access protected resources) until it is blacklisted. Refresh Tokens must be issued to a single authenticated client to prevent the use of leaked tokens by other parties. Access Tokens must also be kept secret, but due to its shorter life, security considerations are less critical.
还有一个会话可能被劫持或固定。
如果您使用 SSL,所有 headers 都会被加密。
所以我会更喜欢原生的 JWT 机制,并且会注意客户端 auth 令牌的存储。
这是我的一些澄清,
- 在浏览器端存储长期存在的 session 总是有风险的
- 让服务器执行验证第三方或应用程序发送的令牌的工作。这是为了确保发送的令牌完整且有效。
- 我更喜欢始终通过 HTTPS 在 headers 中发送令牌的方法。这变得简单且更安全,因为服务器将向用户 session. 验证您的令牌 w.r.t