Вот конечная цель: написать приложение 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, чтобы получить желаемый эффект?
Или, если я неправильно подхожу к этой проблеме, какие-нибудь указатели или предложения?






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