带有 JWT (oauth?) Flow 的应用程序

App with JWT (oauth?) Flow

我想了解如何在我的应用程序中实施 JWT 令牌身份验证。

据我了解,用户在登录请求中输入凭据(用户+密码)并收到访问令牌(比如 30 分钟)和刷新令牌(比如 60 天)。

每当访问令牌过期时,我将使用用户名+refreshtoken 来创建一个新的访问令牌。

1) First question: is it normal that whenever this happens, all my home screen requests will fail until I get the new content and then I will need to re-send the requests with the new access token?. Or should I do the token validation in a splash screen before any other app flow?

这将持续到 60 天过去并且刷新令牌过期。 ¿ 这里发生了什么?

我不记得 Facebook 或(几乎)任何应用程序再次请求我的凭据。

2) Is the password stored so that app can do a background login again to retrieve both tokens? (I don't want to store password in any way)

-

3) Or is the refresh-token refreshed someway before it expires? (for example it is refreshed as long as user keeps opening the app before 60 days)

  1. 如果您提供流畅的用户体验,第一种方法就可以了——例如您可以将 JWT 过期错误与任何其他错误区分开来,并在不显示错误的情况下执行访问令牌更新。第二种方式也用到了,请参考所谓的“JWT Sliding Expiration”并考虑其利弊。主要缺点是 – 您的授权服务器 (AS) 数据库中存在大量有效访问令牌是否可以?

  2. 例如,某种程度上相关的 RFC 并没有说明不推荐这种后台 JWT 更新流程。然而,考虑到像刷新令牌这样的实体可以用来获取新的访问令牌,它的妥协可能会导致更严重的后果。因此,在刷新令牌更新之前要求某种用户操作可能被认为是一种更好的做法。

  3. 当然要考虑AS会抛出“refresh token expiration”错误的情况。假设你有访问令牌 + 刷新令牌包,你有两种类型的错误,只是为了区分它们——“令牌验证错误”(常见的一种,你不知道你的任何令牌有什么问题)和一般的“错误"(这显然与代币无关)。

  1. 你执行了一些请求。响应是“令牌验证错误”。您建议访问令牌已过期并使用您的刷新令牌执行访问令牌更新流程。
  2. 您再次收到“令牌验证错误”响应。您建议您的刷新令牌已过时并开始执行刷新令牌更新流程。

使用 JWT 的工作流程非常简单。