【问题标题】:Google Drive Api - MVC IDataStoreGoogle Drive Api - MVC IDataStore
【发布时间】:2014-12-01 17:52:56
【问题描述】:

我正在使用来自 google 的 MVC sample code 连接到 Google Drive。 但是我想实现我自己的IDataStore,这样我就可以将用户凭据保存在我的数据库中。

使用 FileStorage 示例,一切正常,我得到 TokenRefreshToken 以及更多,它会在过期时自动刷新令牌。

实现IDataStore 看起来很简单:

public class MyDataStore : IDataStore
{
    public Task ClearAsync()
    {
        ...
    }

    public Task DeleteAsync<T>(string key)
    {
        ...
    }

    public Task<T> GetAsync<T>(string key)
    {
        ...
    }

    public Task StoreAsync<T>(string key, T value)
    {
        ...
    }
}

所以在StoreAsync 中,我将凭据保存在我的数据库中,并在GetAsync 中从数据库中获取。

但奇怪的是,当我使用它时,我收到了access_token,但没有从 Google 返回 refresh_token

我尝试使用自定义 IDataStore 从样本中进行搜索,但我找不到任何东西。

有什么想法吗?

非常感谢

【问题讨论】:

  • 您是否在需要refresh_token时在授权码请求中添加了“access_type=offline”?
  • 每次调用 api 我都没有收到任何刷新令牌。我只收到填充的 access_token。不知道你是什么意思。谢谢
  • UserCredential 和 AuthorizationCodeFlow 负责自动“刷新”令牌,这意味着获取新的访问令牌。这是使用长期刷新令牌完成的,如果您在授权代码流期间使用 access_type=offline 参数,您将收到该令牌以及访问令牌。您可以在示例代码 url 上找到相关信息。
  • @gui47 你把我引向了正确的方向。我搜索并找到了解决我的问题的方法。我会发布它以供将来参考。非常感谢。
  • 没问题。很高兴知道你得到了你想要的。

标签: c# asp.net-mvc google-api google-drive-api


【解决方案1】:

考虑到@gui47的评论,我搜索了如何添加access_type参数,我发现另一个post on StackOverflow的解决方案:

internal class OfflineGoogleAuthorizationCodeFlow : GoogleAuthorizationCodeFlow
{
    public OfflineGoogleAuthorizationCodeFlow(GoogleAuthorizationCodeFlow.Initializer initializer) : base(initializer) { }

    public override AuthorizationCodeRequestUrl CreateAuthorizationCodeRequest(string redirectUri)
    {
        return new GoogleAuthorizationCodeRequestUrl(new Uri(AuthorizationServerUrl))
        {
            ClientId = ClientSecrets.ClientId,
            Scope = string.Join(" ", Scopes),
            RedirectUri = redirectUri,
            AccessType = "offline",
            ApprovalPrompt = "force"
        };
    }
};

非常感谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多