Python и Flask для аутентификации с помощью Amazon Cognito

Вот конечная цель: написать приложение Flask, которое поддерживает вход / аутентификацию с использованием пулов пользователей Amazon Cognito. Оба фреймворка для меня довольно новы.

Я использовал безсерверную аутентификацию с гарантией, чтобы получить токен доступа JWT от Cognito. Однако я не уверен, как и что мне нужно, чтобы проверить токен как действительный. Я прочитал несколько ответов на этом сайте, а также следующие ссылки:

https://aws.amazon.com/premiumsupport/knowledge-center/decode-verify-cognito-json-token/https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/

Первая ссылка предлагает:

To verify the signature of an Amazon Cognito JWT, first search for the key with a key ID that matches the key ID of the JWT. Then, use libraries to decode the token and verify the signature.

Я получил JWK для открытого ключа по предоставленной ссылке, но не знаю, как его использовать. Какие библиотеки я мог бы использовать для декодирования токена, имея в виду, что я работаю в среде Python? Я посмотрел на flask-jwt-extended, но предоставленные классы и методы, похоже, не решают мою точную проблему. Должен ли я переопределить классы и функции в flask-jwt-extended, чтобы получить желаемый эффект?

Или, если я неправильно подхожу к этой проблеме, какие-нибудь указатели или предложения?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
5 737
1

Ответы 1

В итоге я в основном разобрался с этим, но, если кому-то еще интересно, я использовал библиотеку PyJWT для декодирования токенов JWT, возвращаемых Cognito. Заглянул довольно далеко в flask-jwt-extended, но предоставленные методы не охватывали функциональность, которую я искал.

jwt.algorithms.RSAAlgorithm.from_jwk был полезен для декодирования JWK, чтобы получить его открытый ключ

Я застрял на еще более важном вопросе - как вы извлекаете JWT в свое приложение? Я попытался украсить свой обработчик jwt_required () из flask_jwt, но получил сообщение об ошибке «flask_jwt.JWTError: Требуется авторизация. Запрос не содержит токен доступа» при перенаправлении с когнито на мой целевой URL. Похоже, что что-то неправильно настроено на стороне Cognito, но я достаточно новичок в этой теме, что не уверен.

Scott 17.06.2018 18:51

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