DotNet Google API 身份验证问题
DotNet Google API Authentication Issue
我正在尝试 运行 .Net (VB.Net) 的 Google 预测 API,但我遇到了一些问题。
有人有使用服务帐户密钥身份验证的代码示例吗?
我的代码:
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()
当我 运行 上面的代码时,我得到了响应:
Google.Apis.Requests.RequestError
Login Required [401]
Errors [
Message[Login Required] Location[Authorization - header] Reason[required] Domain[global]
]
因此,在 google 控制台中我创建了一个服务帐户密钥并下载了 json 文件并尝试执行下面的代码以生成 authToken
Dim prediction As New PredictionService
Dim service = ServiceAccountCredential.FromServiceAccountData( _
New StreamReader("the path of jsonFile").BaseStream)
Dim auth As String = Await service.GetAccessTokenForRequestAsync()
当我 运行 这段代码时,出现错误:
"invalid_scope"、"Empty or missing scope not allowed."、URI:""
我的变量服务的范围 属性 是空的,它是只读的。所以我不知道如何进行。
有人可以帮帮我吗?
谢谢!
我解决了这个问题。我在 Google 控制台上创建了一个新的服务帐户密钥,但现在使用 P12 而不是 JsonFile。
代码如下:
Private Async Function GetToken() As Task(Of String)
Dim service_email = "your e-mail service accout xxxxx@xxxxx.iam.gserviceaccount.com"
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
现在我遇到了另一个问题,但我会创建一个新主题。
谢谢!
我正在尝试 运行 .Net (VB.Net) 的 Google 预测 API,但我遇到了一些问题。 有人有使用服务帐户密钥身份验证的代码示例吗?
我的代码:
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()
当我 运行 上面的代码时,我得到了响应:
Google.Apis.Requests.RequestError
Login Required [401]
Errors [
Message[Login Required] Location[Authorization - header] Reason[required] Domain[global]
]
因此,在 google 控制台中我创建了一个服务帐户密钥并下载了 json 文件并尝试执行下面的代码以生成 authToken
Dim prediction As New PredictionService
Dim service = ServiceAccountCredential.FromServiceAccountData( _
New StreamReader("the path of jsonFile").BaseStream)
Dim auth As String = Await service.GetAccessTokenForRequestAsync()
当我 运行 这段代码时,出现错误: "invalid_scope"、"Empty or missing scope not allowed."、URI:""
我的变量服务的范围 属性 是空的,它是只读的。所以我不知道如何进行。
有人可以帮帮我吗?
谢谢!
我解决了这个问题。我在 Google 控制台上创建了一个新的服务帐户密钥,但现在使用 P12 而不是 JsonFile。
代码如下:
Private Async Function GetToken() As Task(Of String)
Dim service_email = "your e-mail service accout xxxxx@xxxxx.iam.gserviceaccount.com"
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
现在我遇到了另一个问题,但我会创建一个新主题。
谢谢!