我一直在使用 IAuthorizationState (AuthorizationState) 和 WebServerClient,我正在尝试找出保存授权状态信息的正确方法,以便在检索时框架可以就需要进行哪些调用做出最佳决策获取 Web 服务调用所需的访问 token 。
假设我从头开始并且数据库中尚未保留任何 token ,我将执行以下步骤:
WebServerClient.PrepareRequestUserAuthorization
- 用户被发送到 Google。该 URL 包含刷新 token 的离线参数ProcessUserAuthorization
- 我从 Google 获取代码参数(授权代码),并调用以获取 AccessToken 和 RefreshToken 以及过期日期
如果我现在想保留这一点,我应该保留整个对象以便日期也保留下来还是两个 token 就足够了?
当用户执行另一个需要授权状态信息的操作时,我现在可以进行数据库查找来检索 token 。在检索 token 后,我是否始终需要调用 RefreshAuthorization 方法,或者我应该执行自己的逻辑来查看日期是否已过期(假设我也保留了这些日期)?
更新1:
我最终将日期保留在数据库中,以便 IAuthorizationState 可以完全恢复到其最后的状态。 然后我打电话
client.RefreshAuthorization(auth, TimeSpan.FromSeconds(MinRefreshTimespanInSec));
如果 token 最终被刷新,则返回 true;如果 token 仍然有效且不需要刷新,则返回 false。变量 auth 是从 DB 恢复的授权状态。
最佳答案
如果您存储访问 token 到期日期,您就知道何时需要将刷新 token 交换为新的访问 token :这样您就不必通过与 oauth2 提供商的额外往返来打扰最终用户。
关于c# - 如何保留 DotNetOpenAuth OAuth2 刷新和访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699581/