在VB.NET中进行Google Drive身份验证以下载文件

时间:2019-03-28 19:08:54

标签: asp.net .net vb.net google-drive-api google-oauth2

我的目标是使用Drive API v3和VB.NET从Google云端硬盘下载文件。

我在Google控制台中设置了凭据:在“ OAuth 2.0客户端ID”下,将“ {http://localhost”放在“授权重定向URI”和“ JavaScript授权来源”中,并保存我的客户端密钥文件。我在使用NuGet包Google.Apis.Drive.v3的ASP.NET 4.0上。

该错误发生在“凭据= GoogleWebAuthorizationBroker.AuthorizeAsync”行上。它会弹出一个新的Chrome标签,并说:

  
      
  1. 那是一个错误。   错误:redirect_uri_mismatch   请求http://localhost:9895/authorize/中的重定向URI与为OAuth客户端授权的重定向URI不匹配。要更新授权的重定向URI,请访问:https://console.developers.google.com/apis/credentials/oauthclient/[MyClientID]?project=[MyProjectNumber]
  2.   

但是每次我得到一个不同的端口号。

   Public Function AuthenticateOauth() As DriveService
      ' Request authentication from a user using oAuth2
      Dim clientSecretJson = "C:\WebApps\PeruvianGuineaPig\App_Data\client_secret.json"
      Dim applicationName = "DriveApi"

      Try
         ' Permissions
         Dim scopes As String() = New String() {DriveService.Scope.DriveReadonly}
         Dim credential As UserCredential

         Using stream As New FileStream(clientSecretJson, FileMode.Open, FileAccess.Read)
            Dim credPath As String
            credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)
            credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly.GetName.Name)

            ' Requesting Authentication
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
                                                                     scopes,
                                                                     "user",
                                                                     CancellationToken.None,
                                                                     New FileDataStore(credPath, True)).Result
         End Using

         ' Create Drive API service
         Dim Service = New DriveService(New BaseClientService.Initializer() With
                                    {.HttpClientInitializer = credential, .ApplicationName = applicationName})

         Return Service
      Catch ex As Exception
         Return Nothing
      End Try
   End Function

1 个答案:

答案 0 :(得分:0)

我没有意识到我需要将项目作为网站打开(并从本地IIS站点列表中选择),而不仅仅是打开Project / Solution文件。现在,它使用我在调试时在IIS中提供的端口号。

我现在有另一个问题,但这是另一个问题...