Получил 'invalid_grant' в oauth2 SignedJwtAssertionCredentials

Я пытаюсь создать oauth2 access_token в сценарии API JSON между серверами. Но это не удалось с ошибкой invalid_grant, пожалуйста, помогите.

from oauth2client.client import SignedJwtAssertionCredentials

KEY_FILE = 'xxxxxxxxxxxx-privatekey.p12'

with open(KEY_FILE, 'r') as fd:
    key = fd.read()

SERVICE_ACCOUNT_EMAIL = 'xxxxxx.apps.googleusercontent.com'

credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
      scope="https://www.googleapis.com/auth/datastore https://www.googleapis.com/auth/userinfo.email",
      token_uri='https://accounts.google.com/o/oauth2/token')


assertion = credentials._generate_assertion()

h = httplib2.Http()
credentials._do_refresh_request(h.request)

и я получил

Traceback (most recent call last):
  File "/Users/pahud/Projects/oauth2client/x.py", line 24, in <module>
    credentials._do_refresh_request(h.request)
  File "/Users/pahud/Projects/oauth2client/oauth2client/client.py", line 710, in _do_refresh_request
    raise AccessTokenRefreshError(error_msg)
oauth2client.client.AccessTokenRefreshError: invalid_grant
[Finished in 0.7s with exit code 1]

3 ответа

Я починил это.

SERVICE_ACCOUNT_EMAIL = 'xxxxxx.apps.googleusercontent.com'

выше это идентификатор клиента, а не электронная почта, я исправил это, и теперь он работает.

У меня та же проблема.

Чтобы решить проблему, вам необходимо отметить следующие элементы:

  1. Вы использовали client_secrets.json в своей программе? Если да, проверьте, совпадает ли имя с текущим каталогом.

  2. "client_email " или "SERVICE_ACCOUNT_EMAIL"это не ваша личная электронная почта или идентификатор клиента. Это" электронная почта клиента ". Вы можете проверить эту электронную почту в https://console.developers.google.com/project/ ==>credentials==>Service account==>email address,

    В основном, если ваш идентификатор клиента:<clientid>.apps.googleusercontent.com

    Ваш клиент электронной почты здесь будет:<clientid>@developer.gserviceaccount.com

В моем случае проблема была с файлом.boto. Попробуйте настроить его снова с учетными данными из учетной записи службы.

Для тех, кто использует запасной вариант: gcs_oauth2_boto_plugin.SetFallbackClientIdAndSecret(CLIENT_ID, CLIENT_SECRET)

используйте в качестве альтернативы любой "идентификатор клиента для собственного приложения". Это не обязательно, как сказано в: https://cloud.google.com/storage/docs/gspythonlibrary

но я не мог найти другой путь, без него он выкидывал ошибки.

Другие вопросы по тегам