У меня есть веб-приложение angularjs SPA, которое использует ADAL-JS (и adal- angular). Он настроен на аутентификацию с нашим корпоративным AD в MS Azure. Кажется, что входной поток работает правильно, и SPA получает id_token.
Затем, когда пользователь нажимает кнопку, SPA делает запрос к API REST, который я размещаю на AWS API Gateway. Я передаю id_token в заголовке Authorization: Bearer <id_token>
.
Шлюз API получает заголовок, как предполагалось, и теперь должен определить, является ли данный токен хорошим или не разрешать или запрещать доступ.
У меня есть тестовый токен, и он правильно анализирует на https://jwt.io/, но до сих пор мне не удалось найти открытый ключ или сертификат я должен использовать для проверки подписи. Я просмотрел:
- https://login.microsoftonline.com/ {tenantid}/federationmetadata/2007-06/federationmetadata.xml
- https://login.microsoftonline.com/ {tenantId}/discovery/keys
- https://login.microsoftonline.com/common/.well-known/openid-configuration (чтобы получить jwks_uri)
- https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
- https://login.microsoftonline.com/common/discovery/keys
- https://login.microsoftonline.com/common/discovery/v2.0/keys
Я думаю, что я должен использовать значение свойства x5c ключа в https://login.microsoftonline.com/common/discovery/keys, соответствующее свойствам kid и x5t из JWT id_token (в настоящее время a3QN0BZS7s4nN-BdrjbF0Y_LdMM
, что приводит к значению x5c, начиная с "MIIDBTCCAe2gAwIBAgIQY..." ). Тем не менее, страница https://jwt.io/ сообщает "Недействительная подпись" (я также попытался обернуть ключевое значение с помощью "----- BEGIN CERTIFICATE - ---" и "----- END CERTIFICATE -----" ).
Кроме того, существует ли (возможно, python) библиотека, которая может облегчить проверку данного id_token, как в приведенном выше случае (так что мне не нужно будет сам захватить ключ подписи на лету?)... Лучшее, что я мог найти (ADAL для python), похоже, не предоставляет эту функцию?