【发布时间】:2014-12-01 17:52:56
【问题描述】:
我正在使用来自 google 的 MVC sample code 连接到 Google Drive。
但是我想实现我自己的IDataStore,这样我就可以将用户凭据保存在我的数据库中。
使用 FileStorage 示例,一切正常,我得到 Token 和 RefreshToken 以及更多,它会在过期时自动刷新令牌。
实现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