Java Spring JWT与刷新令牌工作流问题

时间:2018-11-09 06:35:24

标签: java spring spring-security oauth jwt

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

到目前为止,我已经知道了:

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

问题:

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

1 个答案:

答案 0 :(得分:2)

  

区别两个标记的最佳方法是什么。

刷新令牌根本不必是JWT。我更喜欢简单地生成一个随机的字母数字字符串。刷新令牌不包含任何其他信息。它需要查询数据库以确认刷新令牌的有效性。您可以通过它们在请求中出现的位置来区分它们。授权令牌(访问令牌)应显示在您选择的标题中。

  

第3步中的错误(而非未经授权)应该是什么,以便将其与没有有效令牌的请求区分开来

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

  

/ token / refresh当前不要求身份验证。应该吗?

不,不需要身份验证。

  

/ token / refresh端点应该是带有标题的POST,带有参数的POST或带有标题的GET。

一切取决于您。我更喜欢使用带有参数和专用网址的POST,例如/ token / refresh