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

因此,如果您更改“用户”,您将把它存储为另一个用户。由于您 运行 这是一个已安装的应用程序,因此您需要实施某种方式让您的桌面应用程序了解它的不同用户。然后为每个用户发送不同的字符串。