GoogleWebAuthorizationBroker 中的新 FileDataStore 每次都会产生一个新端口

new FileDataStore in GoogleWebAuthorizationBroker results in a new port each time

所以我遵循了 http://www.daimto.com/, namely http://www.daimto.com/webmaster-tools-api-with-c/ 中的一些示例。经过漫长的一夜后,我终于可以让它工作了。我这样做的方法是简单地删除

new FileDataStore("Daimto.GoogleWebMasters.Auth.Store")

将代码更改为:

  UserCredential credential = GoogleWebAuthorizationBroker(new ClientSecrets 
{ ClientId = clientId, ClientSecret = clientSecret }                                                                                            
, scopes                                                                                     
, userName                                                                                 
, CancellationToken.None                                                                      
, null).Result; // <-- notice null here

那么数据存储真的有必要吗?当我添加它时,我的 IIS 每次刷新都会生成一个新的端口号,因此无法在 google 中授权 url 重定向。 顺便说一句,我尝试了目录的物理完整路径,但结果相同。

如果默认情况下您不包括文件数据存储或任何数据存储,客户端库将使用文件数据存储并在 %appData%

中创建文件

所以从技术上讲你不需要使用它。

FileDataStore 到底做了什么?

让我们看看 FileDataStore。以下代码验证时。将在执行代码的计算机上的 %AppData% 目录中创建一个名为 Drive.Auth.Store 的文件夹。

因此我们将有一个名为 %AppDatat%\Drive.Auth.Store 的新目录。当我检查我的机器时,我发现它在这里 C:\Users\lindaHP\AppData\Roaming\Drive.Auth.Store

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

每个用户都有自己的文件,您可以通过更改“LookIAmAUniqueUser”值来更改用户。

该文件包含访问此用户帐户所需的所有信息。

备用教程

我为您准备了另一个教程。 Google .net – FileDatastore demystified

我的笔记

我不知道不使用 filedatastore 会如何改变端口的显示与否。我需要对此进行测试,这可能是客户端库中的错误。或我猜测的功能取决于您如何看待它。

看来这个解决方案只是错误的方式,也许只是过时了。最后,我根据 this 重写了所有内容。现在它可以在本地和已发布的地方以及 FileDataStore 上找到。