Я поддерживаю сайт и его мобильные приложения (iOS и Android).Для входа в Google в мобильном приложении я использую пакет google-auth Python на стороне сервера.
Примерно месяц назад я начал получать сообщения об ошибках, связанных с Google.Вход со стороны сервера.Сообщение об ошибке выглядит следующим образом:
Сертификат для идентификатора ключа 728f4016652079b9ed99861bb09bafc5a45baa86 не найден.
Серверная часть аутентификации входа в систему Google следует за этим документом:
from google.oauth2 import id_token
from google.auth.transport import requests
# ...
try:
# The following line may raise ValueError with message:
# Certificate for key id xxxx not found.
id_info = id_token.verify_oauth2_token(google_id_token, requests.Request())
if id_info['aud'] not in VALID_CLIENT_IDS:
logger.error('Invalid aud from Google ID token: %s', id_info['aud'])
raise ValueError('Unverified audience.')
# ...
except ValueError as exc:
logger.error('Fail to verify Google ID token: %s', exc, extra={'request': request})
Ошибка происходит от модуля google.auth.jwt при проверке выпущенного Google JWT по списку общедоступных сертификатов Google.
Погружаясь в код google-auth , я вижу, что функция verify_oauth2_token()
извлекает публичные сертификаты Google с URL-адреса https://www.googleapis.com/oauth2/v1/certs. Кажется, что иногда для некоторых токенов Google ID, отправляемых сВ некоторых телефонах Android идентификатор ключа не может быть найден в этом URL.
Вот некоторые другие детали, которые могут быть полезны:
- Похоже, что приложение для iOS не имеет такого типавопрос.Из заголовка
USER_AGENT
видно, что ошибка возникает только в приложении для Android (USER_AGENT=okhttp/3.11.0
).И это происходит только в некоторых устройствах Android, а не во всех. - Мне было интересно, если это происходит только для телефонов Android из Китая (например, если они подключаются через VPN).Поэтому я также проверил IP-адрес пользователя.Но оказалось, что некоторые из этих пользователей были из Европы.
- Какой-то идентификатор ключа снова и снова повторяется в журналах ошибок сервера.Например, идентификатор ключа
aa436c3f63b281ce0d976da0b51a34860ff960eb
виден десятки раз, с начала ноября до настоящего времени (конец декабря). - Я постоянно вижу эту ошибку, несколько раз (10 ~ 30 раз) каждыйдень.
Мой сайт работает в следующей среде:
- ОС: Linux (CentOS 7) 64-битная
- Apache 2 с mod_wsgi 4.5.24
- Python 3.6.7 и Django 2.1.2
- google-auth версия: пробовал и 1.3.0 и 1.6.1
так как не смогвоспроизвести эту проблему либо на моем iPhone, либо на моем телефоне Android (Huawei P20, куплен во Франции), я полностью застрял.
Но у одного из моих друзей возникла эта проблема, и он купил свой Androidтелефон из Гонконга.Это заставляет меня задуматься, возможно ли, что в некоторых странах для входа в Google используются другие сертификаты, отличные от общедоступных, по адресу https://www.googleapis.com/oauth2/v1/certs?
Не думаю, что это ошибка в пакете google-auth,Мне интересно, слышал ли кто-нибудь из вас об этой ошибке, и мог бы дать мне подсказку о ее возможной причине?
Заранее спасибо!