我正在使用函数调用Google Api身份验证
public static Google.Apis.Drive.v3.DriveService GetService()
{
//get Credentials from client_secret.json file
UserCredential credential;
var CSPath = MyServer.MapPath("Content");
using (var stream = new FileStream(Path.Combine(CSPath, "client_secret.json"), FileMode.Open, FileAccess.Read)) {
string credPath = MyServer.MapPath("content/token");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromStream(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
//create Drive API service.
Google.Apis.Drive.v3.DriveService service = new Google.Apis.Drive.v3.DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "GoogleDriveRestAPI-v3",
});
return service;
}
它将Token存储在应用程序下的content\Token文件夹中。
我正在使用此功能从用户Google Drive中检索一些文件。
它对一个用户来说运行良好,但我想在我们的应用程序中实现它,这样每个用户都会从他自己的Google Drive帐户中检索文件。
这个senario与谷歌文件选择器配合良好
我的问题是允许每个用户使用hios自己的谷歌驱动器帐户
GoogleWebAuthorizationBroker。AuthorizeAsync默认情况下使用fileDatastore,它将用户凭据存储在machines%appdata%文件夹中。它为用户凭证创建的文件的名称由"表示;用户";。
UserCredential credential;
using (var stream = new FileStream(clientSecretsJsonFilePath
,FileMode.Open
,FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { DriveService.Scope.Drive, DriveService.Scope.DriveFile },
"LookIAmAUniqueUser",
CancellationToken.None,
new FileDataStore("Drive.Auth.Store")
).Result;
}
会导致
谷歌。Apis。Auth。OAuth2.Respones.TokenResponse-LookIAmAUniqueUser。TokenResponse LookIAmAUniqueUser
Google.net–FileDatastore解密
所以如果你改变";用户";您将以不同的用户身份存储它。当你把它作为一个已安装的应用程序运行时,你需要通过某种方式让你的桌面应用程序知道它是一个不同的用户。然后为每个用户发送一个不同的字符串。