验证刷新令牌和颁发新的持有者令牌的工作流是什么?



这不是一个编码问题,而是一个正确处理和处理刷新令牌的概念问题。

我有一个单页应用程序,它在登录时发出 jwt 令牌。令牌工作正常。 现在,我想将过期时间设置为较低的值,并使用刷新令牌来刷新持有者令牌。

问题是,刷新令牌中应存储哪些声明?在颁发新令牌之前,应该执行哪些步骤来验证刷新令牌?

例如,现在我的刷新令牌是一个 jwt,它存储过期时间,因此客户端知道刷新令牌何时过期,以及用户名声明,以便我知道刷新令牌与哪个用户相关联。

因此,当收到刷新令牌时:

  1. 检查它是否未过期。
  2. 检查它是否未被吊销。
  3. 使用刷新令牌中的用户名颁发新的短期持有者令牌。

这是正确的工作流程吗?我只是想确保我没有错过任何安全检查。

如果应用程序是单页应用程序,则不应使用长期刷新令牌,因为无法安全地存储它们。

OAuth2 为不同类型的客户端定义了许多授权流(我在这里进行了描述(。刷新令牌仅适用于机密客户端(如位于安全服务器上的 Web 应用程序(。

刷新令牌与访问令牌一样容易被盗,因为两者都是存储在客户端上的持有者令牌。

某些 OAuth 库允许 SPA 或其他非机密客户端通过使用 Cookie 中的会话令牌与授权服务器的令牌端点通信来获取新的访问令牌。只要 Cookie 有效,用户就可以获得新的访问令牌。之后,用户将需要重新进行身份验证。当然,cookie可以被标记为安全且仅http,使它们更难被窃取。

如果从使用访问令牌的同一服务终结点颁发 JWT 令牌,则可以让客户端在令牌请求中包含随机数,该令牌请求进行哈希处理并作为声明包含在令牌中。客户端可以在授权标头中发送 JWT,在自定义标头中发送随机数。令牌验证将再次对随机数进行哈希处理,并将其与 JWT 中的声明进行比较。这样,如果您的令牌被盗,如果没有随机数值,则更难使用。当然,在有针对性的攻击中,你的随机数也可能被盗。

相关内容

最新更新