2014-10-29 1 views
1

Я пытаюсь использовать учетную запись службы, чтобы поговорить с Admin SDK Directory API через .Net Client Library. Тем не менее, ответ, который я получаю, - это 400 Bad Request с содержанием ответа json от "error":"invalid_grant".Почему моя учетная запись службы пытается связаться с Google API через OAuth2 Вернуть ошибку 'invalid_grant'?

Вот мой код

Public Sub New() 

    Dim _certificate = New X509Certificate2("c:\path\to\file.psk", "notasecret" _ 
    , X509KeyStorageFlags.Exportable) 

    Dim _serviceAccountEmail = "[email protected]" 

    Dim _scopes As IList(Of String) = New List(Of String)() 

    _scopes.Add(directory_v1.DirectoryService.Scope.AdminDirectoryUserReadonly) 

    Dim credential = New ServiceAccountCredential(New 
     ServiceAccountCredential.Initializer(_serviceAccountEmail) With { 
      .Scopes = _scopes}.FromCertificate(_certificate)) 

    Dim service = New directory_v1.DirectoryService(New BaseClientService.Initializer() With { _ 
               .HttpClientInitializer = credential, 
               .ApplicationName = "AeriesConnect"}) 

    Dim request = service.Users.List() 
    request.Domain = "my.domain.com" 

    Dim users As directory_v1.Data.Users = request.Execute() 

    For Each user In users.UsersValue 
     System.Diagnostics.Debug.WriteLine("userName ID: " & user.Id) 
    Next 

End Sub 

Service Object

Мой служебный объект имеет следующие свойства. Все остальные свойства пустые сборники UsersResource или GroupsResource

service.BaseUri = 'https://www.googleapis.com/admin/directory/v1" 

service.HttpClientInitializer Свойства

Обратите внимание, что свойство Токен пуст. Это имеет значение? Кажется, так оно и есть. Это моя вина?

service.HttpClientInitializer Properties

Объект запроса

enter image description here

Я получаю ошибку прямо на выполнение и исключение из Google и является Google.Apis.Auth.OAuth2.Responses.TokenResponseException.

Я думаю, что я предоставил все разрешения, необходимые мне НО НОТА имейте это в виду, это для учетной записи Google Apps для образования.

  1. При входе в качестве суперпользователя в Консоль разработчика я создал проект и включил API-интерфейс администратора SDK. Я также создал учетные данные.
  2. Как в этом GAFE в «Super User», я пошел в «Безопасность -> Расширенные настройки -> Управление API клиентского доступа» область и added my Client ID (не по электронной почте) и объем, как https://www.googleapis.com/auth/admin.directory.user

заголовка запроса

Мой запрос заголовок, который POST к https://accounts.google.com/o/oauth2/token имеет этот

assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6Imh0dHBzOi8vd3d3L 
mdvb2dsZWFwaXMuY29tL2F1dGgvYWRtaW4uZGlyZWN0b3J5LnVzZXIiLCJpc3MiOiI2OTY3MTQyNzg2OS1hb 
XFmMjVzY204Y2N1azhycHJrMDQ2djAzb2cybGducEBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSAiLC 
JhdWQiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvdG9rZW4iLCJleHAiOjE0MTQ2MTY 
3NDMsImlhdCI6MTQxNDYxMzE0M30.T9H-3tgOQSNdSj3MrUjJNNR5YqsxuJ97bCMJrrEJQ1Noewyv2mj 
Dp96AZSZmzSxseAWrgptUv7sR4Mi21CWNACmjQjWPw8BI48sAyIclUPq6UhtMhRZDB1xX7t-Tq8NSbddJt 
yJWxTc-IEAT7ixVpjjrosdG8Zcs0MgTuUgKHb8 
&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer 

... и последние биты I t чувствую себя не так. Почему возникает ощущение, что он внезапно кодируется в HTML?

Вопрос

Что я сделал не так? Я предполагаю, что думаю, что я не аутентифицирован. Но что мне нужно делать по-другому? Я использовал theirexamples, чтобы помочь, но я не могу это понять.

+0

Как выглядит ваш запрос после запроса. – Codexer

+0

И ваше обслуживание после того, как вы объявили этот объект? – Codexer

+0

invalid_grant обычно означает, что часы вашего сервера не синхронизируются с NTP. (Решение: проверьте время сервера, если его неправильно исправить.) Учетной записи службы должен быть предоставлен доступ к учетной записи, к которой вы хотите получить доступ, используя адрес электронной почты, такой как любой другой пользователь. – DaImTo

ответ

0

Моя проблема заключалась в том, что у меня было неправильное значение в поле электронной почты учетной записи службы. Простое решение. Мне потребовалось два дня, чтобы понять это. Тьфу!