gpt4 book ai didi

带有刷新 token 工作流程问题的 Java Spring JWT

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:56 25 4
gpt4 key购买 nike

我对使用 Java Spring 的 API JWT 刷新 token 工作流有一些疑问。

到目前为止我有这个:

  1. 用户登录/users/login - 如果成功,则返回带有 2 个 header 的响应授权和刷新。其中包含 2 个 token - 一个有效期为 30 分钟,另一个有效期为 4 小时。
  2. 然后他可以使用授权 header 访问所有其他端点。
  3. 如果在某个时候访问端点时他的 token 已过期,他会收到错误消息(未经授权)。
  4. 并且必须使用他获得的刷新 token 向/token/refresh 发出请求。

问题:

  • 我已将其设置为授权 token 具有声明:type=auth 和刷新 token 有一个声明:type=refresh。最好的方法是什么区分这两个标记。
  • 第 3 步中的错误应该是什么(而不是未经授权的错误)以将其与没有有效 token 的请求区分开来
  • /token/refresh 目前不要求身份验证。应该吗?
  • /token/refresh 端点应该是带 header 的 POST、带参数的 POST 还是带 header 的 GET。

最佳答案

What is the best way to distinguish the two tokens.

刷新 token 根本不必是 JWT。我更喜欢简单地生成一个随机的字母数字字符串。刷新 token 不携带任何附加信息。它需要查找数据库以确认刷新 token 的有效性。您可以通过它们在您的请求中出现的位置来区分它们。授权 token (访问 token )应出现在您选择的 header 中。

What should be the error in step 3 (instead of unauthorized) to distinguish it from a request without a valid token

发送 401 Unauthorized 正是这样做的方法。 401 告诉客户端,他现在无法访问该资源,但他可以采取措施以便他可以再次访问该资源(登录/刷新 token )。另一边的 403 会告诉客户端,该资源不属于他,他将不得不请求权限,例如通过联系管理员

/token/refresh doesn't ask for authentication currently. Should it?

不,不需要身份验证。

Should the /token/refresh endpoint be a POST with header, POST with parameters or a GET with header.

一般来说,GET 端点应该是只读的,并且不会改变任何资源。 POST 和 PUT 端点用于突变。在此,我将使用带有参数和专用 URL 的 POST,例如/ token /刷新

关于带有刷新 token 工作流程问题的 Java Spring JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220918/

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