gpt4 book ai didi

java - 服务器上的 JWT 登录流程和 token 验证

转载 作者:搜寻专家 更新时间:2023-11-01 03:48:31 25 4
gpt4 key购买 nike

在服务器上验证 token 的正确方法是什么?

我在我的应用程序中使用 jwt token 机制,这是它目前的工作方式:

  1. 客户使用用户名和密码登录
  2. 服务器检查用户名和密码并使用 RSA 创建 token 公钥和私钥,并使用有效负载向客户端发送新 token 包含用户的电子邮件地址,然后将相同的 token 存储在数据库。
  3. 任何对服务器资源的后续请求,客户端一起发送jwt token 服务器然后检查 token 中可用的 token 基于用户登录时使用的电子邮件地址的数据库。
  4. 然后将资源提供给客户。

我想我在这里遗漏了一些东西。阅读其他博文,我看到 token 应该使用 key 进行验证。

我有几个问题:

  1. 我不确定是否应该根据公钥或私钥
  2. 在向客户端发送 jwt token 时,我是否必须将公钥发送到我使用 RSA 机制时有效负载中的客户端?所以对于每个请求对于资源,我必须解码 token 并检查公钥针对私钥?
  3. 在哪些情况下,我需要将 token 存储在数据库中?或者是根本不需要将 token 存储在数据库中?
  4. 当恶意软件在客户端获取 token 时会发生什么并将其用于登录?

注意:我在后端使用 vanilla java 和 jax-rs(rest),在前端使用 angularjs。谢谢

最佳答案

  1. 服务器必须使用私钥签署 JWT。然后,当客户端收到返回的 token 时,客户端可以使用公钥以及服务器本身对其进行验证。
  2. 在发送 token 之前,客户端必须知道公钥。
  3. 您不需要在数据库中存储访问 token ,因为 JWT 已签名。你可以用签名来验证它。如果 token 是使用任何其他私钥生成的,则无法使用您的公钥对其进行验证。
  4. 攻击者不能使用访问 token 登录。如果存在恶意获取 token 的风险,您必须为 token 设置一个较短的有效期并使用 refresh token用于获取新 token 。刷新 token 应保留在服务器端。如果刷新 token 被泄露,它可能会失效(用户应该能够撤销对该客户端的访问)。或者,您可以向 JWT 注入(inject)一个安全的随机数,并将该数字存储在服​​务器端以供用户使用。当用户发送 token 时,您必须根据数据库中的随机数验证 JWT 中的安全随机数。然后您可以通过更改数据库中的安全随机数来使 token 无效。

关于java - 服务器上的 JWT 登录流程和 token 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com