2

根据此处发布的上一个问题,我正在尝试从服务器应用程序使用日历服务。

我“自己”管理身份验证流程,并将用户的访问令牌和刷新令牌存储在数据库中。现在我想我可以使用 .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;
}

...但我确信有更聪明的方法可以做到这一点!

提前致谢。

4

1 回答 1

6

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

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