Я пытаюсь использовать flask -awscognito для создания простого примера сервера и клиента, который аутентифицируется с помощью AWS Cognito, но я получаю сообщение об ошибке, не могу найти документацию о том, как исправить.
Сервер падает с этой ошибкой:
flask_awscognito.exceptions.FlaskAWSCognitoError: State for CSRF is not correct
Это код сервера:
from flask import request, jsonify
import flask.json
from flask_awscognito import AWSCognitoAuthentication
app = flask.Flask(__name__)
app.config['AWS_DEFAULT_REGION'] = '...' # from the user pool console page
app.config['AWS_COGNITO_DOMAIN'] = '...' # just used the domain name of eventual app's domain here but I don't know if it's associate with the pool in any way. This might as well be a random string.
app.config['AWS_COGNITO_USER_POOL_ID'] = '...' # from the user pool console page
app.config['AWS_COGNITO_USER_POOL_CLIENT_ID'] = '...' # from the user pool console page
app.config['AWS_COGNITO_USER_POOL_CLIENT_SECRET'] = '' # from the user pool console page
app.config['AWS_COGNITO_REDIRECT_URL'] = 'http://localhost:5000/aws_cognito_redirect' # left this from the docs but not sure what I'll have it as in the future.
aws_auth = AWSCognitoAuthentication(app)
@app.route("/auth_test")
@aws_auth.authentication_required
def auth_test ():
print (request.args)
return jsonify({
"claims" : aws_auth.claims,
"token" : aws_auth.get_access_token(request.args)
})
if __name__ == "__main__":
app.run(debug=True)
Это код клиента:
import requests
import boto3
host = "http://127.0.0.1:5000"
region = '...' # same as in server
user_pool_id = '...' # same as in server
username = '...' # a user that is in the pool
password = '...' # correct password from the pool
app_client_id = '...' # same as in server
client = boto3.client('cognito-idp', region_name = region)
route = "/auth_test"
auth_response = client.admin_initiate_auth(
UserPoolId = user_pool_id,
ClientId = app_client_id,
AuthFlow = 'ADMIN_NO_SRP_AUTH',
AuthParameters = {
'USERNAME' : username,
'PASSWORD' : password
}
)
print (auth_response)
id_token = auth_response['AuthenticationResult']['IdToken']
response = requests.get(host + route , headers = { 'Authorization': "Bearer " + id_token })
print(response.json())
Notice I ' Я не передаю STATE=whatever
в моем клиенте как сообщение arg. Не уверен, что это будет. Я гуглил вокруг того, включено ли это в ответ аутентификации, который я получаю. Возможно, это требуется. Я не уверен, что мне даже нужен CSRF в моем одностраничном приложении с Cognito для управления сессиями. Я в порядке, отключив сервер, нуждающийся в этом или включающий во всех клиентах, которые отправляют данные Я просто хочу, чтобы он работал правильно.
Кто-нибудь знает, как исправить эту ошибку? Спасибо!
Я попытался добавить следующие строки после поиска в Google для похожих проблем, и это не изменило сообщение об ошибке.
from flask_cors import CORS
CORS(app)