Flask и PyJWT получают заголовок авторизации - PullRequest
1 голос
/ 22 января 2020

Существует клиент REST, который отправляет HTTP-запросы на сервер. REST-клиент отправляет запрос, который содержит заголовок

Authorization=Bearer someValidBase64

Теперь у меня есть серверное приложение в Python 3.8, Flask 1.1.1, PyJWT == 1.7.1.

@app.route(my_rest_end_point)
def get_service_payments():
    authorization_header = request.headers.get('Authorization')

    # It prints correctly: Bearer someValidBase64
    print("Authorization header:\n" + authorization_header)

    # Details from that header
    user_permissions = jwt.decode(authorization_header)

Сбой с

File "/usr/local/lib/python3.7/site-packages/jwt/api_jws.py", line 188, in _load
    raise DecodeError('Invalid header padding')
jwt.exceptions.DecodeError: Invalid header padding

То, что я пробовал

authorization_header = request.headers.get('Authorization')
print("Authorization header:\n" + authorization_header)
cleared_header =  authorization_header[7:]
print("cleared_header:\n" + cleared_header)
user_permissions = jwt.decode(cleared_header)

Будет напечатано

Authorization header:
Bearer someValidBase64
cleared_header:
someValidBase64

Сбой снова, потому что сам токен имеет структуру someValidBase64. otherValidPart, так что есть точка ..

1 Ответ

2 голосов
/ 22 января 2020

Ну, проблема в authorization_header состоит из значения "Bearer someValidBase64". Теперь, когда вы пытаетесь декодировать это, вы сталкиваетесь с этой ошибкой, потому что к ней прикреплен префикс «Носитель».

Убедитесь, что вы храните только часть base64 строки внутри authorization_header без префикса, чтобы можно было успешно ее декодировать.

Обновление:

Как я понимаю, authorization_header состоит из токена JWT, и, поскольку вы пытаетесь декодировать токен JWT, убедитесь, что ваш authorization_header имеет формат xxxxx.yyyyy.zzzzz Если вы найдете его в любом другом формате, кроме убедитесь, что вы удалили строку так, чтобы был извлечен только этот формат токена JWT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...