Ответ 1
Я исправил его.
SERVICE_ACCOUNT_EMAIL = 'xxxxxx.apps.googleusercontent.com'
выше идентификатор клиента, а не электронная почта, я исправил это, и теперь он работает.
Я пытаюсь сделать 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]
http://i.stack.imgur.com/iGGYx.png
Я исправил его.
SERVICE_ACCOUNT_EMAIL = 'xxxxxx.apps.googleusercontent.com'
выше идентификатор клиента, а не электронная почта, я исправил это, и теперь он работает.
У меня та же проблема.
Чтобы решить эту проблему, вы должны заметить следующие элементы:
Вы использовали client_secrets.json в своей программе? Если да, проверьте, совпадает ли имя в текущем каталоге.
"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
но я не мог найти другой путь, он без ошибок выкидывал ошибки.