如何坚持DotNetOpenAuth OAuth2刷新和访问令牌

时间:2013-09-09 13:41:31

标签: c# oauth-2.0 dotnetopenauth

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

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

  1. WebServerClient.PrepareRequestUserAuthorization - 用户被发送到谷歌。该网址包含刷新令牌的离线参数
  2. ProcessUserAuthorization - 我从谷歌获取代码参数(授权代码)并调用以获取AccessToken和RefreshToken以及到期日期
  3. 如果我现在想坚持下去,我是否应该坚持整个对象,以便日期保持不变或两个令牌是否足够?

    当用户执行需要授权状态信息的其他操作时,我现在可以执行数据库查找以检索令牌。在检索到令牌后我是否总是需要调用RefreshAuthorization方法,或者我应该执行自己的逻辑来查看日期是否超过它们的期限(假设我也坚持了这些)?

    更新1:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. AccessToken:用于为提供者​​使用服务。例如。 Twitter&发布推文。
  2. 刷新令牌:我认为这是为了获取新的访问令牌。
  3. 那么..为什么存储日期?好吧,如果您在尝试访问服务之前可以使用日期数据作为检查,您可以重定向用户以主动对提供商重新授权..否则,您将尝试访问服务(例如发布推文) )这将给你一个错误(访问过期或其他)...这意味着你需要处理该错误情况,然后再次将用户重定向到auth。

    当然,如果你从不使用任何这些服务(例如,你已经通过Twitter验证,但绝不会使用任何推特服务)..为什么还要保存任何数据呢?毕竟你不打算用它......

    奖励提示:Simple Authentication可能是为.NET应用程序执行(简单)OAuth的更简单方法。

答案 1 :(得分:1)

如果您存储访问令牌到期日期,您就知道何时需要为新的访问令牌交换刷新令牌:因此您不必为最终用户添加额外的oauth2提供程序往返。< / p>