Вручную проверить токен доступа flask-extended-jwt
У меня есть приложение SPA, которое содержит форму с полем загрузки файла. У меня есть API отдыха, конечные точки которого защищены через JWT flask-extended-JWT. Для аутентификации конечных точек REST я использую @jwt_required. Я также хочу аутентифицировать запрос на загрузку.
Из-за клиентской стороны я не могу добавить заголовок Authorization Bearer, поэтому я решил добавить маркер доступа в качестве скрытого поля при отправке формы.
Каков наилучший способ вручную проверить токен доступа JWT после того, как я прочитал его из формы?
class Upload(Resource):
def post(self):
#TODO: check for access token
access_token = None
if 'access_token' in request.form and request.form['access_token']:
access_token = request.form['access_token']
else:
message = json.dumps({'message': 'Invalid or missing token', 'success': False})
return Response(response=message, status=401, mimetype='text/plain')
if access_token:
#TODO: validate_token(access_token)
Спасибо
1 ответ
Автор flask-jwt-продлен здесь. Это отличный вопрос. В настоящее время не существует поддерживаемого способа сделать это в расширении: захват токена из запроса и его декодирование тесно связаны друг с другом. Это было бы трудно разделить, потому что при выполнении полной цепочки декодирования происходит много условных вещей. Например, проверка значения CSRF только в том случае, если запрос отправлен через cookie-файл, или разграничение токена доступа и обновления для функции черного списка.
Можно создать обобщенную функцию, ее подпись будет выглядеть примерно так: decode_and_verify_jwt(encoded_token, is_access_token=True, check_csrf=False)
, Однако это усложнит остальную часть кода в flask_jwt_extended и будет довольно запутанной функцией для общего случая.
Я думаю, что в этом случае было бы проще просто добавить четвертый поиск в расширение, чтобы вы могли использовать что-то вроде:
app.config['JWT_TOKEN_LOCATION'] = ['headers', 'forms']
app.config['JWT_FORM_KEY'] = 'access_token'
# Use the rest of the application normally
Если вы хотите сделать тикет на странице github, чтобы я мог это отследить, я был бы рад поработать над этим.