1

我正在使用 .NET 的 MirrorQuickStart 项目,并且遇到了刷新令牌的问题。据我所知,当“通知”操作进入时间线订阅更新时,它没有被使用。

将应用程序发布到开发服务器,除了更新正确的 ID 和配置信息外,“通知”操作在第一个小时内起作用,但在那之后,它停止响应,直到我刷新网页并重新-认证。

我检查了数据库服务器上的 StoredCredentials 表,它填充了 UserId、AccessToken 和 RefreshToken 值。我还在标准应用程序流程中创建了一个新的镜像服务(因为我不确定如何调试通知流程并查看正在发生的任何实际错误消息),并且每次我都会在服务上看到 AccessToken 和 RefreshToken。

MirrorService service = new MirrorService(new BaseClientService.Initializer
{
     Authenticator = Utils.GetAuthenticatorFromState(
             Utils.GetStoredCredentials(userId))
});

我已经查看了 Drive 的 DrEdit 项目,流程似乎在GEtAuthenticatorFromStateGetStoredCredentials方法方面基本相同。

这个问题似乎与我遇到的问题最直接相关,但就镜像项目而言,答案没有意义。

如何通过 .NET 中的 Google Drive SDK 使用刷新令牌生成访问令牌?

我必须缺少一些简单的东西-只是不确定,因为我对 OAuth 流程还​​很陌生。

谢谢你。

4

1 回答 1

1

从您链接到的其他 SO 答案来看,这似乎解决了以下问题Model/Utils.cs

        /// <summary>
        /// Returns the IAuthorizationState stored in the StoredStateClient instance.
        /// </summary>
        /// <param name="provider">OAuth2 client.</param>
        /// <returns>The stored authorization state.</returns>
        static public IAuthorizationState GetState(StoredStateClient provider)
        {
            provider.RefreshToken(provider.State);
            return provider.State;
        }

注意添加的行:provider.RefreshToken(provider.State). 目前还不清楚为什么需要调用,RefreshToken因为这应该由库自动完成......

于 2013-06-24T21:01:09.177 回答