Соответствие 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 с библиотеками, которые вы используете.