仅在必要时刷新访问令牌

本文关键字:刷新 访问令牌 | 更新日期: 2023-09-27 18:34:57

根据之前发布的问题,我正在尝试从服务器应用程序使用日历服务。

我"自己"管理身份验证流,并将用户的访问令牌和刷新令牌存储在数据库中。现在我想我可以使用 .NET 客户端示例中所示的方法来使用CalendarService。但我仍然想知道 IAuthorizationState GetAuthorization(WebServerClient client) 方法的最佳实现是什么,以便仅在需要时请求刷新访问令牌。我当前幼稚的实现每次都会刷新令牌:

private IAuthorizationState GetAuthorization(WebServerClient client)
{
    IAuthorizationState state = new AuthorizationState(new[] { "profile", CalendarService.Scopes.Calendar.GetStringValue() });
    state.AccessToken = _accessToken;
    state.RefreshToken = _refreshToken;
    client.RefreshToken(state);
    return state;
}

。但我相信有一种更聪明的方法可以做到这一点!

提前谢谢。

仅在必要时刷新访问令牌

您可以使用许多流,具体取决于性能需求与带宽、会话长度等。

  1. 您不能执行主动刷新,让事务失败 401,然后获取新令牌并重试事务。有效利用带宽和处理,但会导致事务延迟。
  2. 您可以记下令牌的过期时间,并创建一个计时器任务来刷新令牌,例如在令牌到期前 1 分钟刷新令牌。提供最佳性能,因为始终有可用的令牌,但会消耗带宽和处理时间。
  3. 在尝试事务之前,请检查令牌超时。如果是已过期,获取新的,然后提交交易。如果它有 <5分钟生活,使用它,交易完成后,刷新令牌,为下次做好准备。这(至少对于我的用例(在高效事务和不进行太多冗余刷新之间提供了最佳平衡。