Laravel上有API,该API使用Laravel Passport进行身份验证。在默认设置下,所有设置均运行良好。然后,我们决定将访问令牌的生存期相应地更改为1天1个月。它导致刷新令牌出现问题。 示例:访问令牌已过期,应用将刷新令牌请求发送到API。然后,该应用程序失去了互联网连接,无法获得新令牌。 (服务器发送新令牌,但该应用程序不可用)。互联网连接返回后,该应用程序发送了一个新的刷新请求,但得到了401。因此,应用程序需要从API获取新代码以对用户进行身份验证。我认为强迫用户每天登录不是一个好主意。 有什么建议?也许可以通过类似“握手”的方式来解决该问题?我的意思是仅在确认应用程序获得新令牌后刷新令牌。
答案 0 :(得分:2)
如果我正确理解了您的问题,则表示您最初有一对Access Token1, Refresh Token1
,并且当Access Token1
过期时,您尝试使用{{ 1}}。
现在,由于某种原因,您无法收到这个新的Access Token
对,那么用户会怎么做?好吧,您从消费者的角度来看。如果从Oauth2服务器的角度来看相同的情况。
服务器不知道您是接收令牌还是接收令牌并保存失败。服务器的工作是根据您的有效刷新令牌生成一个新的访问令牌。并且一旦创建了新的访问令牌,它将使旧的刷新令牌无效。这是标准的Oauth2实现。
您可能会尝试这样做,以使旧的刷新令牌不会在新的访问令牌生成时立即被撤销。但这带来了重放攻击的可能性。
因此,标准做法是让用户再次登录。