应用JWT(oauth?)Flow

时间:2017-08-01 18:59:17

标签: android ios oauth jwt express-jwt

我正在尝试了解如何在我的应用中实现JWT令牌身份验证。

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

每当Access令牌到期时,我将使用username + refreshtoken创建一个新的Access令牌。

  

1)第一个问题:每当发生这种情况时,我的一切都是正常的   主屏幕请求将失败,直到我获得新内容然后我   需要使用新的访问令牌重新发送请求吗?或者我应该进行令牌验证   在任何其他应用程序流之前的启动屏幕中?

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

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

  

2)是否存储了密码,以便app可以再次进行后台登录   检索两个令牌? (我不想以任何方式存储密码)

-

  

3)或者刷新令牌在到期前刷新了吗? (例如,只要用户在60天之前一直打开应用程序,它就会刷新)

1 个答案:

答案 0 :(得分:0)

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

2)例如,以某种方式相关RFC并未声明不建议以这种方式使用此类后台JWT更新流程。然而,考虑到诸如刷新令牌之类的实体可以用于获得新的访问令牌,其妥协可能导致更严重的后果。因此,在刷新令牌更新之前需要某种用户操作可能被评为更好的做法。

3)当然,你应该考虑AS会抛出“刷新令牌过期”错误的情况。让我们考虑你有访问令牌+刷新令牌包,你有两种类型的错误,只是为了区分它们 - “令牌验证错误”(常见的一个,你不知道你的任何令牌有什么问题)和一般“错误“(这显然与代币无关)。

  1. 您执行了一些请求。响应是“令牌验证错误”。您建议访问令牌已过期,并使用刷新令牌执行访问令牌更新流程。
  2. 您再次收到“令牌验证错误”响应。您建议刷新令牌已过时并开始执行刷新令牌更新流程。
  3. 使用JWT的简单工作流程可能看起来像。