2017-05-04 13 views
0

.Net(VB.Net)用のGoogle Prediction APIを実行しようとしていますが、いくつかの問題に直面しています。 サービスアカウントキー認証を使用したコード例がありますか?DotNet Google API認証の問題

マイコード:

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

だから、私はサービスアカウントキーを作成し、Googleのコンソールで、私は、JSONのダウンロードをした:

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() 

私は上記のコードを実行した私は、応答を取得authTokenを生成するコードを実行しようとしました

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

このコードを実行すると、get eエラー: "invalid_scope"、 "空または欠落スコープが許可されていません。"、Uri: ""

可変サービスのScopeプロパティがEmptyで、ReadOnlyです。だから私はどのように進むべきか分からない。

Somebobyは私を助けることができますか?

ありがとうございます!

答えて

0

私はこの問題を解決しました。 Google Consoleで新しいサービスアカウントキーを作成しましたが、今はJsonFileではなくP12を使用しています。ここで

はコードです:

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 

は今、私は別の問題に直面していますが、私は新しいトピックを作成します。

ありがとうございます!