我正在尝试了解如何在我的应用中实现JWT令牌身份验证。
据我了解,用户在登录请求中输入凭据(用户+密码)并接收访问令牌(比如30分钟)和刷新令牌(比如说60天)。
每当Access令牌到期时,我将使用username + refreshtoken创建一个新的Access令牌。
1)第一个问题:每当发生这种情况时,我的一切都是正常的 主屏幕请求将失败,直到我获得新内容然后我 需要使用新的访问令牌重新发送请求吗?或者我应该进行令牌验证 在任何其他应用程序流之前的启动屏幕中?
这将持续到60天过去并刷新令牌过期。 ¿这里发生了什么?
我不记得曾经facebook或(几乎)任何再次请求我的凭据的应用程序。
2)是否存储了密码,以便app可以再次进行后台登录 检索两个令牌? (我不想以任何方式存储密码)
-
3)或者刷新令牌在到期前刷新了吗? (例如,只要用户在60天之前一直打开应用程序,它就会刷新)
答案 0 :(得分:0)
1)如果您提供流畅的用户体验,第一种方式是可以的 - 例如您可以将JWT到期错误与任何其他错误区分开来,并执行访问令牌更新而不显示错误。也使用第二种方式,请参考所谓的“JWT Sliding Expiration”并考虑其优缺点。主要的问题是 - 您的授权服务器(AS)数据库中是否存在大量有效的访问令牌?
2)例如,以某种方式相关RFC并未声明不建议以这种方式使用此类后台JWT更新流程。然而,考虑到诸如刷新令牌之类的实体可以用于获得新的访问令牌,其妥协可能导致更严重的后果。因此,在刷新令牌更新之前需要某种用户操作可能被评为更好的做法。
3)当然,你应该考虑AS会抛出“刷新令牌过期”错误的情况。让我们考虑你有访问令牌+刷新令牌包,你有两种类型的错误,只是为了区分它们 - “令牌验证错误”(常见的一个,你不知道你的任何令牌有什么问题)和一般“错误“(这显然与代币无关)。
使用JWT的简单工作流程可能看起来像。