Соответствие JWS API Google OAuth2

В настоящее время Google предоставляет по адресу https://www.googleapis.com/oauth2/v2/certs следующие значения сертификатов.

{
 "keys": [
  {
   "kty": "RSA",
   "alg": "RS256",
   "use": "sig",
   "kid": "90adc60c0f9f503265a5ebc2c404c88e59882083",
   "n": "u_EOLEKRMNuTA_UPh9R-LTQkF1TNGE6XRVbgvh081A5VtKNFe8b2CmoGvgrm_ochjX0robr8LwpOUSHO779yJANgvwuATHJ4SKYHzN2Gr0yBsC7MyL9CI_eXik4RGiNlEU6mgoy7GGnLtY5-A6OPo-I-4HEttP81LJrmSYh6Y2k=",
   "e": "AQAB"
  },
  {
   "kty": "RSA",
   "alg": "RS256",
   "use": "sig",
   "kid": "5886590f72b8e40668c55fa366c19efb2a22d635",
   "n": "x9mePRk3StM-Tg32S_E8OyBYD8uIHhPPa6U8jkHbpnRf2jEImk1ndIwIoJQCrHl1IsKpY1j81fyQKul0u1Frvb-LFGFVY3L7zSR4hnwzuU_05JtKZRfK-87Kj8JVMJbt34SKRmUitPH4QA23b6g-ORUMYjqWgNWufV6OPy8GYNE=",
   "e": "AQAB"
  }
 ]
}

Я пытаюсь получить доступ к API Google с помощью oic и jwkest и получить ошибку

DeSerializationNotPossible: Not base64url encoded

Проблема возникает потому, что n Параметры обоих ключей заканчиваются на = персонаж. IIUC, они должны быть закодированы в Base64URL в соответствии с проектом JSON Web Algorighms, а Base64URL удаляет = символов, в соответствии с проектом JSON Web Signature.

Эта ошибка в библиотеках Python, которые я использую, или это действительно Google не соответствует спецификации? Если последнее: куда я могу сообщить об этом?

1 ответ

Вы правы в том, что Google не поддерживает (сейчас RFC) JWA и JWS при использовании обычной base64, а не base64url. Однако я полагаю, что они уже узнали об этой проблеме и исправили ее с помощью новой версии конечной точки JWKS: https://www.googleapis.com/oauth2/v3/certs, которая имеет те же ключи, что и v2, но закодировано правильно согласно спецификации. Вы должны быть в состоянии использовать конечную точку v3 с библиотеками, которые вы используете.

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