假设我们有 短期访问令牌(15 分钟)和 长期刷新令牌(7 天)。
我们什么时候应该要求后端刷新访问令牌?
我看到两个选项:
在第一个选项中,我看到了一个优点 - 如果访问令牌和刷新令牌将过期并且用户停留在页面上,不采取任何操作,他也不会发送任何http请求,而不是计时器仍然有效并且用户会自动注销。
在第二个选项中 - 如果访问令牌和刷新令牌过期,则仅当用户在页面上执行某些操作时才会被注销,例如:离开页面或发出 http 请求。 如果他留在页面上,他将不会自动退出。
还有什么比前端更好的实现呢?
我会推荐选项 2 作为您的默认行为,因为它会给您一个有弹性的应用程序。每个 OAuth 客户端都应该这样做,因为在某些设置中,由于基础设施原因有时也会收到 401,例如令牌签名证书续订。
如果您想减少 API 的 401 响应,选项 1 是一种优化。但是,如果您不小心,可能会导致客户端和 API 开发不正确。我个人从来不使用它。
请注意,expires_in 字段随访问令牌一起返回,但刷新令牌没有等效字段,因此客户端无法检测用户会话何时过期,除非您开发自定义解决方案。
在编码API调用时,建议这样做,如我的示例代码:
出于兴趣,上述应用程序有一个在线版本,允许您测试 OAuth 到期事件以了解其行为 - 请参阅我的 快速入门 页面