2

我一直在使用 IAuthorizationState (AuthorizationState) 和 WebServerClient,我正在尝试找出持久化授权状态信息的正确方法,以便在检索时框架可以就需要进行什么调用做出最佳决定以获得Web 服务调用所需的访问令牌。

假设我从头开始并且数据库中还没有保留任何令牌,我将执行以下步骤:

  1. WebServerClient.PrepareRequestUserAuthorization- 用户被发送到谷歌。url 包含刷新令牌的离线参数
  2. ProcessUserAuthorization- 我从谷歌取回代码参数(授权码)并调用以获取 AccessToken 和 RefreshToken 以及到期日期

如果我现在想坚持这一点,我应该坚持整个对象以便日期也坚持下去还是两个令牌就足够了?

当用户执行另一个需要授权状态信息的操作时,我现在可以进行数据库查找以检索令牌。检索令牌后是否总是需要调用 RefreshAuthorization 方法,还是应该执行自己的逻辑来查看日期是否已过期(假设我也保留了这些日期)?

更新 1:

我最终将日期保留在数据库中,因此 IAuthorizationState 可以完全恢复到其最后状态。然后我打电话

client.RefreshAuthorization(auth, TimeSpan.FromSeconds(MinRefreshTimespanInSec));

如果令牌最终被刷新,则返回 true;如果令牌仍然有效且不需要刷新,则返回 false。变量 auth 是从 DB 恢复的授权状态。

4

2 回答 2

1

至少,您需要存储这两个令牌,但如果您需要访问任何 OAuth 服务,我也会存储日期。

  1. AccessToken:用于消费服务,供提供者使用。例如。推特并发布推文。
  2. 刷新令牌:我认为这是为了获取新的访问令牌。

那么..为什么要存储日期?好吧,如果您可以在尝试访问服务之前使用日期数据作为检查,则可以将用户重定向到主动针对提供商重新授权..否则,您将尝试访问服务(例如发布推文)这会给你一个错误(访问过期或其他)......这意味着你需要处理那个错误情况,然后再次将用户重定向到身份验证。

当然,如果您从不使用任何这些服务(例如,您已经通过 Twitter 进行了身份验证,但永远不会使用任何 Twitter 服务),为什么还要保存这些数据呢?毕竟你不会使用它。

额外提示:简单身份验证可能是为您的 .NET 应用程序执行(简单)OAuth 的更简单方法。

于 2013-09-09T13:48:12.807 回答
1

如果您存储访问令牌的到期日期,您就知道何时应该将刷新令牌换成新的访问令牌:因此您不必为最终用户额外往返 oauth2 提供程序而烦恼。

于 2013-09-09T17:04:27.607 回答