Я пытаюсь узнать, как использовать AWS Cognito, и меня смущают различные варианты «response_type» при интеграции моего (тестового) клиентского приложения с пользовательским интерфейсом входа в Cognito. Если я выберу «токен», а не «код», URL-адрес перенаправления, сгенерированный Cognito после успешного входа в систему, будет иметь символ «#» перед аргументами, что не позволяет моему тестовому приложению (python, Flask) анализировать аргументы.
Мне интересно, кто-нибудь может объяснить предполагаемые варианты использования этих двух методов?
Пока у меня есть ...
- Создан пул пользователей и добавил пользователя в AWS Консоль управления
- В разделе «Настройки клиента приложения» установите URL моего обратного вызова для входа в систему https://localhost/test/
- Создано основание c python приложение с flask для тестирования обратных вызовов
- Сконфигурировано gunicorn для запуска моего flask приложения с ssl-сертификатом, поэтому мое приложение работает с https-запросами
Код для мое Flask тестовое приложение выглядит следующим образом ...
import os
import traceback
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/test/', methods=['GET'])
def test():
try:
resp = jsonify(request.args)
status = 200
except:
resp = traceback.format_exc()
status = 500
return resp, status
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0', port=int(os.environ.get("PORT", 80)))
Если я введу следующий URL в chrome, с типом ответа 'code', мое приложение будет работать, как и ожидалось
Логин URL ...
https: // [домен] .auth. [Регион] .amazoncognito.com / log in? response_type = code & client_id = [id] & redirect_uri = https://localhost/test/
URL-адрес перенаправления ...
https://localhost/test/?code= [code]
Тестовое приложение json ...
{
code: [code]
}
Однако, если я введу следующее с типом ответа «токен», URL-адрес перенаправления будет создан с символом «#» перед аргументами, и мое Flask приложение не видит ни одного из них.
URL входа в систему ...
https: // [домен] .auth. [регион] .amazoncognito. com / login? response_type = token & client_id = [id] & redirect_uri = https://localhost/test/
URL перенаправления ...
https://localhost/test/#id_token = [токен] & access_token [access_token] = & expires_in = 3600 & token_type = Bearer
Тестовое приложение json ...
{}
Обратите внимание, что поведение, которое я вижу, соответствует документации Amazon о формате ответа Я просто не понимаю, почему это так.