C# 谷歌驱动Api-MVC IDataStore

C# 谷歌驱动Api-MVC IDataStore,c#,asp.net-mvc,google-api,google-drive-api,C#,Asp.net Mvc,Google Api,Google Drive Api,我正在使用谷歌的MVC连接到谷歌硬盘。 但是,我希望实现自己的IDataStore,以便将用户凭据保存在数据库中 使用FileStorage示例,一切正常,我得到令牌和刷新令牌,除此之外,它会在令牌过期时自动刷新令牌 实现IDataStore看起来很简单: public class MyDataStore : IDataStore { public Task ClearAsync() { ... } public Task DeleteAsync

我正在使用谷歌的MVC连接到谷歌硬盘。 但是,我希望实现自己的
IDataStore
,以便将用户凭据保存在数据库中

使用FileStorage示例,一切正常,我得到令牌刷新令牌,除此之外,它会在令牌过期时自动刷新令牌

实现
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)
    {
        ...
    }
}
公共类MyDataStore:IDataStore
{
公共任务ClearAsync()
{
...
}
公共任务DeleteAsync(字符串键)
{
...
}
公共任务GetAsync(字符串键)
{
...
}
公共任务StoreAsync(字符串键,T值)
{
...
}
}
因此,在
StoreAsync
中,我将凭证保存在数据库中,并在
GetAsync
中从数据库中获取凭证

但奇怪的是,当我使用它时,我收到了
access\u令牌
,但没有
refresh\u令牌
从谷歌返回

我尝试使用自定义的
IDataStore
从样本中搜索,但什么也找不到

有什么想法吗


非常感谢

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

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"
        };
    }
};

非常感谢

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