【发布时间】:2022-02-05 19:32:51
【问题描述】:
我的问题是确定何时刷新访问令牌。
我已经读到我应该在每次请求之前刷新新的访问令牌,但它在其他地方说不推荐这样做。所以我的问题是我是否应该在每次请求之前刷新访问令牌或发送请求并在收到 401 Unauthorized 状态后刷新访问令牌并重试对指定资源的请求。
【问题讨论】:
标签: oauth-2.0 openid-connect refresh-token
我的问题是确定何时刷新访问令牌。
我已经读到我应该在每次请求之前刷新新的访问令牌,但它在其他地方说不推荐这样做。所以我的问题是我是否应该在每次请求之前刷新访问令牌或发送请求并在收到 401 Unauthorized 状态后刷新访问令牌并重试对指定资源的请求。
【问题讨论】:
标签: oauth-2.0 openid-connect refresh-token
您可以采取任何一种方式,您知道访问令牌何时即将到期,例如 1 分钟前,您使用刷新令牌获取一组新的刷新/访问令牌。
在 401 上执行此操作也是一种选择,但这意味着您需要执行额外请求,并且您还需要注意一些竞争条件,因为在许多配置中您只允许一次性使用刷新令牌(每次都会获得一个新的刷新令牌)。因此,使用 401 方法时,您需要确保不会发送许多并发请求来为同一用户获取新令牌。
【讨论】:
您可以从访问令牌中获取到期时间(通常在一个名为 exp 的字段中,格式为 unix 时间戳)。因此,每当您准备向资源服务器发送 HTTP 请求时,您都可以检查访问令牌是否已经过期或即将过期(例如 60 秒)。
如果是,请尝试使用刷新令牌获取新的访问令牌,并更新返回的新访问令牌和存储在您应用内的刷新令牌。否则,请继续使用现有的访问令牌。
【讨论】: