Oauth 2.0 在使用JWT令牌身份验证时,刷新令牌真的有必要吗?
我正在引用另一篇SO帖子,其中讨论了如何使用JWT的刷新令牌 我有一个应用程序,它有一个非常通用的体系结构,我的客户机(web和移动设备)与RESTAPI通信,然后RESTAPI与服务层和数据层通信 我理解JWT令牌身份验证,但对于如何使用刷新令牌,我有点困惑 我希望我的JWT身份验证具有以下属性:Oauth 2.0 在使用JWT令牌身份验证时,刷新令牌真的有必要吗?,oauth-2.0,jwt,http-token-authentication,Oauth 2.0,Jwt,Http Token Authentication,我正在引用另一篇SO帖子,其中讨论了如何使用JWT的刷新令牌 我有一个应用程序,它有一个非常通用的体系结构,我的客户机(web和移动设备)与RESTAPI通信,然后RESTAPI与服务层和数据层通信 我理解JWT令牌身份验证,但对于如何使用刷新令牌,我有点困惑 我希望我的JWT身份验证具有以下属性: JWT令牌的过期时间为2小时 客户端每小时刷新一次令牌 如果用户令牌未刷新(用户处于非活动状态且应用程序未打开)且过期,则他们需要在任何时候登录以恢复 我看到很多人声称使用刷新令牌的概念使这成为
稍后让我来回答您的问题,并从实际讨论刷新令牌的全部目的开始 所以情况是: 用户打开应用程序并提供其登录凭据。现在,应用程序很可能正在与REST后端服务交互。REST是无状态的,没有授权访问API的方法。因此,到目前为止,在讨论中,无法检查授权用户是否正在访问API,或者只是一些随机请求 现在要解决这个问题,我们需要一种方法来知道请求来自授权用户。所以,我们所做的就是引入一种叫做访问令牌的东西。因此,一旦用户成功通过身份验证,就会向其颁发一个访问令牌。这个令牌应该是一个长且高度随机的令牌(以确保它不被猜测)。这就是JWT出现的地方。现在,您可能/可能不想在JWT令牌中存储任何特定于用户的详细信息。理想情况下,您只需要在JWT中存储非常简单、非常不敏感的细节。JWT哈希的操作以检索其他用户的详细信息(IDOR等)由JWT(正在使用的库)自己负责 现在,我们的授权访问问题已经解决了 现在我们讨论一个攻击场景。假设使用上述所有用户Alice,使用应用程序,拥有授权访问令牌,现在她的应用程序可以向所有API发出请求,并根据她的授权检索数据 假设Alice以某种方式丢失了访问令牌,或者换句话说,对手Bob获得了Alice的访问令牌。现在,尽管未经授权,Bob仍可以向Alice授权的所有API发出请求 理想情况下我们不想要的东西 现在,这个问题的解决方案是: