Почему мой сервер жалуется на «неверный заголовок авторизации»? - PullRequest
0 голосов
/ 25 января 2020

У меня проблемы с получением клиентом и сервером простой AWS авторизации Cognito для согласования того, как должен выглядеть токен.

Мой клиент использует boto3 и запросы. Я передаю авторизацию в заголовке, который я видел в более чем половине учебников, но я также видел использование параметра auth, который я не использую.

Вот мой сервер:

from flask import request, jsonify, make_response
import flask.json
from flask_jwt_extended import (
    JWTManager, jwt_required, create_access_token,
    get_jwt_identity
)

app = flask.Flask(__name__)

# from: https://flask-jwt-extended.readthedocs.io/en/stable/basic_usage/
# Setup the Flask-JWT-Extended extension
app.config['JWT_SECRET_KEY'] = 'super-secret'  # Change this!
jwt = JWTManager(app)

@app.route("/auth_test")
@jwt_required
def auth_test ():
    current_user = get_jwt_identity()
    return jsonify({"current_user": "current_user"})

if __name__ == "__main__":
    app.run(debug=True)

Одна подсказка здесь заключается в том, что JWT_SECRET_KEY скопирован из учебника, но мне неясно, на что мне нужно его изменить. Возможно, это моя проблема, но если это так, я не вижу решения или того, как его изменить.

Вот мой клиент:

import requests
import boto3

host = "http://127.0.0.1:8000"
region = '...'
user_pool_id = '...'
username = '...'
password = '...'
app_client_id = '...'
client = boto3.client('cognito-idp', region_name = region)

auth_response = client.admin_initiate_auth(
    UserPoolId = user_pool_id,
    ClientId = app_client_id,
    AuthFlow = 'ADMIN_NO_SRP_AUTH',
    AuthParameters = {
        'USERNAME' : username,
        'PASSWORD' : password
    }
)

id_token = auth_response['AuthenticationResult']['IdToken']
response = requests.get(host + "/auth_test" , headers = { 'Authorization': id_token })
print(response.json())

Он печатает: {'msg': «Неверный заголовок авторизации. Ожидаемое значение« Носитель »»}

Это указывает на то, что я должен передать "Bearer " + id_token вместо id_token, но это противоречит большинству учебных пособий, которые я прочитал, и более того, когда я это делаю что я все еще получаю ту же ошибку.

Кто-нибудь знает, что я делаю неправильно?

РЕДАКТИРОВАТЬ:

Я внес некоторые изменения из-за комментариев. Я добавил

app.config['JWT_ALGORITHM'] = 'RS256'
app.config['JWT_DECODE_ALGORITHMS'] = ['RS256']
#app.config['JWT_PUBLIC_KEY'] = '...' # value that I got from https://cognito-idp.us-east-1.amazonaws.com/<my pool id>/.well-known/jwks.json. There were two entries I tried both values found in kid

RS256 соответствует кодировке Cognito, поэтому я думаю, что мне нужно установить это для моего сервера. Однако теперь я просто получаю эту ошибку при запуске демонстрации:

ValueError: Could not deserialize key data.

Спасибо за помощь!

...