Google API возвращает invalid_grant в производство, но не локально
У меня очень странное исключение, использующее API google в python. Цель состоит в проверке на стороне сервера действительности маркера, соответствующего подписке в приложении от приложения Android.
Итак, для этого у нас есть учетная запись службы, прикрепленная к нашей учетной записи Google Play, и мы пытаемся аутентифицировать наш запрос, используя oauth через ключ p12 (преобразованный в сертификат pem для удаления фразы):
from apiclient.discovery import build
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
with open("googleplay.pem") as f:
private_key = f.read()
credentials = SignedJwtAssertionCredentials(GOOGLE_CLIENT_EMAIL, private_key, scope=['https://www.googleapis.com/auth/androidpublisher'])
http_auth = credentials.authorize(Http())
client = build('androidpublisher', 'v2', http=http_auth)
И это отлично работает на моем компьютере. Но последняя строка вызывает исключение на моих серверах: invalid_grant
Я не понимаю, откуда это может произойти! Если вы можете помочь нам с этим, это было бы замечательно!
некоторый дополнительный код, который я использовал для преобразования сертификата p12 в сертификат pem:
openssl pkcs12 -in privatekey.p12 -nodes -nocerts > privatekey.pem
Затем я удалил первые 4 строки.
Спасибо заранее!
Ответы
Ответ 1
Не уверен, что это поможет дать вам какие-либо подсказки.
Недавно я исправил проблему с похожим сообщением об ошибке (также содержит "invalid_grant" ). Мое дело было связано с отсутствием значения refresh_token в учетных данных OAuth2, что приводит к обновлению обновленных учетных данных. Таким образом, я исправился, чтобы получить новый токен обновления от google. Оказывается, google только распространяет обновление в первый раз, когда пользователь авторизуется с Google. Если пользователь не отключит приложение и не выполнит авторизацию. Или в приложении устанавливается flow.params['approval_prompt'] = 'force'
(обычно для локальной отладки).
В моем случае речь идет о учетных данных для веб-приложений и авторизации OAuth2. Ваш выглядит как учетная запись службы, поэтому я не уверен, что ваша проблема также является проблемой обновления.
Ответ 2
У меня была точно такая же проблема.
Я исправил это, синхронизируя системное время, используя NTP
Это будет работать только на корневом сервере. Не на виртуальном сервере.
Обратитесь к поставщику хостинга вашего сервера, если вы арендуете vServer.
Надеюсь, это поможет:)