Laravel 上有 API,使用 Laravel Passport 进行身份验证。在默认设置下一切都运行良好。然后我们决定将访问 token 的生命周期相应更改为 1 天和 1 个月。它导致刷新 token 出现问题。 示例:访问 token 已过期,应用程序向 API 发送刷新 token 请求。然后应用程序就会失去互联网连接并且无法获取新的 token 。 (服务器发送新 token ,但应用程序不可用)。互联网连接恢复后,应用程序发送新的刷新请求,但收到 401。因此应用程序需要从 API 获取新代码来对用户进行身份验证。我认为强制用户每天登录不是一个好主意。 有什么建议么?也许有像“握手”之类的方法可以解决这个问题?我的意思是只有在确认应用程序获得新 token 后才刷新 token 。
最佳答案
如果我正确理解您的问题,您的意思是您最初有一个 Access Token1、Refresh Token1
对,当 Access Token1
过期时,您尝试请求使用刷新 token 1
创建新的访问 token
。
现在,由于某种原因,您无法收到这个新的访问 token 2、刷新 token 2
对,那么用户会做什么?嗯,你是从消费者的角度来看这一点的。如果您从 Oauth2 服务器的角度看到相同的场景。
服务器不知道您是否未能收到 token 或收到 token 但未能保存。服务器的工作是根据您的有效刷新 token 生成新的访问 token 。一旦创建了新的访问 token ,它就会使旧的刷新 token 失效。这是标准的 Oauth2 实现。
您可以尝试这样做,以便旧的刷新 token 不会在新的访问 token 生成时立即撤销。但这引入了重放攻击的可能性。
因此,标准做法是让用户重新登录。
关于Laravel Passport - 连接不良时刷新 token 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60613891/