【问题标题】:How to persist DotNetOpenAuth OAuth2 refresh and access tokens如何持久化 DotNetOpenAuth OAuth2 刷新和访问令牌
【发布时间】:2013-09-13 00:31:11
【问题描述】:

我一直在使用 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 恢复的授权状态。

【问题讨论】:

    标签: c# oauth-2.0 dotnetopenauth


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-07-04
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 2014-12-21
        • 2021-07-08
        • 2017-04-14
        • 1970-01-01
        相关资源
        最近更新 更多