使用刷新令牌在访问令牌过期之前刷新访问令牌

Refresh access token before it expires using refresh token

我正在开发一个应用程序,它使用 OAuth - 基于令牌的身份验证。

考虑到我们有访问和刷新令牌,这就是流程的样子。

  1. Api call -> intercepter appends access-token -> api returns 200
  2. Api call -> intercepter appends expired access-token -> api returns 401 -> intercepter refreshes token using refresh token -> interceptor retries same req -> returns 200
  3. Api call -> intercepter appends expired access-token -> api returns 401 -> intercepter refreshes token using refresh token(refresh token is also expired) -> prompt guest to sign-in -> guest signed-in -> retry request

这一切都很好而且很好 - 我正在考虑对其进行一些优化,即我不想调用 api 并等待 401 到 return。 而是事先检查令牌是否过期,获取新的访问令牌,然后使用有效令牌调用 api。

这种使用 android 系统时间计算令牌到期时间的方法可能有效 - 但有时当用户更改 android 时间时可能会被误用。

想知道是否有更好的解决方案来避免基于android系统时间的时间过期问题。

即使您在代码中添加了这样的检查,您仍然需要您在问题中提供的流程(因此捕获 401 并相应地刷新令牌)。这是因为,正如您所注意到的,客户端设备上的时间设置可以更改,或者客户端和服务器之间可能存在轻微的时钟偏差(因此不会有意篡改时间设置)。

您在 API 调用之前检查过期的方法只有在您有权访问访问和刷新令牌的过期时间时才有效。因此,要么您收到该信息以及令牌并保存它,要么使用 JWT,您可以轻松检查过期时间。

就个人而言,我不会添加这样的检查,除非有一些强有力的论据(例如,您知道您的应用将主要用于连接速度较慢的远程位置,并且您希望将流量限制在最低限度, ETC。)。您介绍的流程很常见,工作正常。