Google API 使用 GoogleWebAuthorizationBroker 的授权:如何在 Web 应用程序中管理多个用户?
Google API authorisation with GoogleWebAuthorizationBroker: how to manage multiple users in web application?
我正在调用 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;
}
在应用程序下的content\token文件夹中存储Token。
我正在使用此功能从用户 Google 驱动器中检索一些文件。
它对一个用户来说工作正常,但我想在我们的应用程序中实现它,这样每个用户都会
从他自己的 Google 云端硬盘帐户检索文件。
这个 senario 与 Google File Picker
配合得很好
我的问题是允许每个用户使用 hios 自己的 google 驱动器帐户
GoogleWebAuthorizationBroker.AuthorizeAsync 默认使用 fileDatastore,它将用户凭据存储在计算机的 %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;
}
会导致
Google.Apis.Auth.OAuth2.Responses.TokenResponse-LookIAmAUniqueUser.TokenResponse-LookIAmAUniqueUser
Google .net – FileDatastore demystified
因此,如果您更改“用户”,您将把它存储为另一个用户。由于您 运行 这是一个已安装的应用程序,因此您需要实施某种方式让您的桌面应用程序了解它的不同用户。然后为每个用户发送不同的字符串。
我正在调用 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;
}
在应用程序下的content\token文件夹中存储Token。
我正在使用此功能从用户 Google 驱动器中检索一些文件。
它对一个用户来说工作正常,但我想在我们的应用程序中实现它,这样每个用户都会 从他自己的 Google 云端硬盘帐户检索文件。
这个 senario 与 Google File Picker
配合得很好我的问题是允许每个用户使用 hios 自己的 google 驱动器帐户
GoogleWebAuthorizationBroker.AuthorizeAsync 默认使用 fileDatastore,它将用户凭据存储在计算机的 %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;
}
会导致
Google.Apis.Auth.OAuth2.Responses.TokenResponse-LookIAmAUniqueUser.TokenResponse-LookIAmAUniqueUser
Google .net – FileDatastore demystified
因此,如果您更改“用户”,您将把它存储为另一个用户。由于您 运行 这是一个已安装的应用程序,因此您需要实施某种方式让您的桌面应用程序了解它的不同用户。然后为每个用户发送不同的字符串。