我正在使用针对.NET的MirrorQuickStart项目,并且遇到了刷新令牌的问题。据我所知,当“通知”操作进入时间轴订阅更新时,它没有被使用。
将应用程序发布到开发服务器,基本上除了更新正确的ID和配置信息之外,“通知”操作在第一个小时内有效,但在此之后,它会停止响应,直到我刷新网络页面并重新验证。
我检查了数据库服务器上的StoredCredentials表,并填充了UserId,AccessToken和RefreshToken值。我还在标准应用程序流程中创建了一个新的镜像服务(因为我不知道如何调试通知流程并查看正在发生的任何实际错误消息),每次,我都会在服务上看到AccessToken和RefreshToken。 / p>
MirrorService service = new MirrorService(new BaseClientService.Initializer
{
Authenticator = Utils.GetAuthenticatorFromState(
Utils.GetStoredCredentials(userId))
});
我已经审核了Drive的DrEdit项目,并且GEtAuthenticatorFromState
和GetStoredCredentials
方法的流程似乎基本相同。
这个问题似乎与我遇到的问题最直接相关,但答案在镜像项目方面没有意义。
How to generate access token using refresh token through Google Drive SDK in .NET?
我必须要有一些简单的东西 - 只是不确定,因为我对OAuth流程还不熟悉。
谢谢。
答案 0 :(得分: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
,因为这应该由图书馆自动完成......