如何停止 Youtube API 在文件中保存 OAuth 令牌?
How to stop Youtube API saving OAuth token in a file?
偶然发现授权成功后,刷新和访问OAuth令牌存储在用户的漫游文件夹中。
有没有办法停止这样做?
我也很好奇 - 为什么 Google 认为这是在磁盘上存储刷新令牌的好方法? (尤其是不要告诉用户)。
可以 99.99% 确定 Google 不会 在任何地方存储任何令牌。
用户已使用某个应用程序进行授权,因此该应用程序使用这些令牌执行的操作不受 Google 的控制(除非您说该应用程序是 Google 的应用程序之一).您可能想向应用作者提出问题。
显然(经过一些试验)如果您不提供自己的数据存储,API 会将其保存在您的 Windows 漫游文件夹中 \AppData\Roaming\Google.Apis.Auth
但是,如果您提供 "empty" 数据存储,则不会发生这种情况。
代码如下:
UserCredential credential = null;
var ds = new YoutubeDataStore();
using (var stream = new FileStream("client_id.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload, },
"user",
CancellationToken.None,
ds
);
}
数据存储:
public class YoutubeDataStore : IDataStore
{
public Task ClearAsync()
{
return Task.FromResult<object>(null);
}
public Task DeleteAsync<T>(string key)
{
return Task.FromResult<T>(default(T));
}
public Task<T> GetAsync<T>(string key)
{
return Task.FromResult<T>(default(T));
}
public Task StoreAsync<T>(string key, T value)
{
return Task.FromResult<T>(default(T));
}
}
偶然发现授权成功后,刷新和访问OAuth令牌存储在用户的漫游文件夹中。
有没有办法停止这样做?
我也很好奇 - 为什么 Google 认为这是在磁盘上存储刷新令牌的好方法? (尤其是不要告诉用户)。
可以 99.99% 确定 Google 不会 在任何地方存储任何令牌。
用户已使用某个应用程序进行授权,因此该应用程序使用这些令牌执行的操作不受 Google 的控制(除非您说该应用程序是 Google 的应用程序之一).您可能想向应用作者提出问题。
显然(经过一些试验)如果您不提供自己的数据存储,API 会将其保存在您的 Windows 漫游文件夹中 \AppData\Roaming\Google.Apis.Auth
但是,如果您提供 "empty" 数据存储,则不会发生这种情况。
代码如下:
UserCredential credential = null;
var ds = new YoutubeDataStore();
using (var stream = new FileStream("client_id.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload, },
"user",
CancellationToken.None,
ds
);
}
数据存储:
public class YoutubeDataStore : IDataStore
{
public Task ClearAsync()
{
return Task.FromResult<object>(null);
}
public Task DeleteAsync<T>(string key)
{
return Task.FromResult<T>(default(T));
}
public Task<T> GetAsync<T>(string key)
{
return Task.FromResult<T>(default(T));
}
public Task StoreAsync<T>(string key, T value)
{
return Task.FromResult<T>(default(T));
}
}