JWT刷新令牌流

时间:2014-12-31 20:31:29

标签: security authentication oauth-2.0 jwt

我正在构建移动应用并使用JWT进行身份验证。

似乎最好的方法是将JWT访问令牌与刷新令牌配对,以便我可以根据需要随时使访问令牌过期。

  1. 刷新令牌是什么样的?它是随机字符串吗?这个字符串加密了吗?这是另一个JWT吗?
  2. 刷新令牌将存储在用户模型的数据库中以供访问,对吗?在这种情况下似乎应加密
  3. 我会在用户登录后发回刷新令牌,然后让客户端访问一个单独的路径来检索访问令牌吗?

3 个答案:

答案 0 :(得分:21)

假设这是关于OAuth 2.0的,因为它是关于JWT和刷新令牌......:

  1. 就像访问令牌一样,原则上刷新令牌可以包括你描述的所有选项;当授权服务器想要无状态或者想要向呈现它的客户端强制执行某种“拥有证明”语义时,可以使用JWT;请注意,刷新令牌与访问令牌的不同之处在于它不会呈现给资源服务器,而只会呈现给首先发布它的授权服务器,因此JWTs作为访问令牌的自包含验证优化确实如此。不适用于刷新令牌

  2. 取决于数据库的安全性/访问权限;如果数据库可以被其他方/服务器/应用程序/用户访问,那么是(但您的里程可能因存储加密密钥的位置和方式而异;)

  3. 授权服务器可以同时发出访问令牌和刷新令牌,具体取决于客户端获取它们的授权;规范包含每个标准化拨款的详细信息和选项

答案 1 :(得分:16)

基于此implementation with Node.js of JWT with refresh token

1)在这种情况下,他们使用uid并且它不是JWT。当他们刷新令牌时,他们会发送刷新令牌和用户。如果您将其作为JWT实现,则不需要发送用户,因为它将在JWT中。

2)他们在一个单独的文件(表格)中实现这一点。这对我来说很有意义,因为用户可以登录不同的客户端应用程序,并且可以通过应用程序获得刷新令牌。如果用户丢失了安装了一个应用程序的设备,则该设备的刷新令牌可能会失效,而不会影响其他已登录的设备。

3)在此实现中,它使用访问令牌和刷新令牌响应登录方法。它对我来说是正确的。

答案 2 :(得分:7)

以下是撤销JWT访问令牌的步骤:

1)登录后,发送2个令牌(访问令牌,刷新令牌)以响应客户端。
2)访问令牌的有效期将更少,而刷新将具有较长的到期时间。
3)客户端(前端)将刷新令牌存储在其本地存储中,并将访问令牌存储在cookie中。
4)客户端将使用访问令牌来调用api。但是,当它过期时,请从本地存储中选择刷新令牌,然后调用auth服务器api以获取新令牌。
5)您的身份验证服务器将公开一个api,它将接受刷新令牌并检查其有效性并返回新的访问令牌。
6)刷新令牌过期后,用户将注销。

如果需要更多详细信息,请告诉我,我也可以共享代码(Java + Spring引导)。

您的问题:
队列1:这是另一个JWT,具有较少的索赔,且到期时间较长。

第2个问题:它不会在数据库中。后端将不会存储在任何地方。他们将只使用私钥/公钥对令牌解密,并使用其到期时间对其进行验证。

Que3:是的,正确的