2017-05-04 3 views
0

Ich versuche, die Google Prediction API für .NET (VB.Net) zu starten, und ich habe einige Probleme. Jemand hat ein Codebeispiel, das die Authentifizierung mit dem Dienstkontenschlüssel verwendet?DotNet Google API-Authentifizierung Problem

Mein Code:

Dim myService As New PredictionService() 
Dim myInput As New Data.Input() 
Dim myInputData As New Data.Input.InputData() 
Dim myListParameters As New List(Of Object) 

myListParameters.Add("myInfo") 
myInputData.CsvInstance = myListParameters 
myInput.InputValue = myInputData 

Dim myRequest As TrainedmodelsResource.PredictRequest = _ 
myService.Trainedmodels.Predict(myInput, "myProject", "myModel") 

myRequest.OauthToken = "How can I get the OauthToken?" 
myRequest.Key = "My API Key" 

Dim myResponse = myRequest.Execute() 

Wenn ich den obigen Code lief erhalte ich die Antwort:

Google.Apis.Requests.RequestError 
Login Required [401] 
Errors [ 
    Message[Login Required] Location[Authorization - header] Reason[required] Domain[global] 
] 

Also, in google Konsole ich ein Dienstkonto Schlüssel erstellt, und ich habe den Download von json Datei und versuchen, den Code unten zu erzeugen, um den authToken zu erzeugen

Dim prediction As New PredictionService 
Dim service = ServiceAccountCredential.FromServiceAccountData(_ 
New StreamReader("the path of jsonFile").BaseStream) 
Dim auth As String = Await service.GetAccessTokenForRequestAsync() 

Wenn ich diesen Code lief, ein bekommen th e Fehler: "invalid_scope", "Leere oder fehlende Bereiche nicht erlaubt.", Uri: ""

Die Scope-Eigenschaft von meinem Variablenservice ist leer und es ist ReadOnly. Also ich weiß nicht weiter.

Someboby kann mir helfen?

Danke!

Antwort

0

Ich löste das Problem. Ich habe einen neuen Service Account Key in Google Console erstellt, aber jetzt mit P12 statt JsonFile.

Hier ist der Code:

Private Async Function GetToken() As Task(Of String) 

    Dim service_email = "your e-mail service accout [email protected]" 

    Dim certificate As New X509Certificate2("yourCertificatePath.p12", "notasecret", X509KeyStorageFlags.Exportable) 

    Dim credential As New ServiceAccountCredential(New ServiceAccountCredential.Initializer(service_email) With { 
     .Scopes = New String() {"https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/prediction"} 
    }.FromCertificate(certificate)) 

    credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait() 

    Return credential.Token.AccessToken 

End Function 

nun ein weiteres Problem, das ich bin vor, aber ich werde ein neues Thema erstellen.

Danke!