Flask-JWT-Extended — это расширение для фреймворка Flask, которое обеспечивает функциональность аутентификации и авторизации с использованием JSON Web Tokens (JWT).
JWT — это компактный и самоописывающийся метод передачи информации между двумя сторонами в виде JSON-объекта. Он состоит из трех частей: заголовка, полезной нагрузки и подписи. В заголовке и полезной нагрузке содержится информация о токене, а подпись используется для проверки целостности данных.
Чтобы начать использовать Flask-JWT-Extended, необходимо установить его с помощью pip:
pip install flask-jwt-extended
После установки необходимо создать экземпляр приложения Flask и настроить его для работы с расширением Flask-JWT-Extended. Для этого создадим файл `app.py`:
from flask import Flask
from flask_jwt_extended import JWTManager
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'secret-key' # Секретный ключ для подписи токена
jwt = JWTManager(app)
@app.route('/protected')
@jwt_required # Декоратор для защиты маршрутов, требующих авторизации
def protected():
return 'This is a protected route'
if __name__ == '__main__':
app.run()
В приведенном выше коде мы создаем экземпляр приложения Flask, устанавливаем секретный ключ для подписи токена и инициализируем объект JWTManager. Затем мы использовали декоратор `@jwt_required`, чтобы защитить маршрут `/protected`, который требует авторизации.
Теперь мы можем создать токен при успешной аутентификации пользователя. Для этого создадим маршрут `/login`:
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
# Проверка имени пользователя и пароля
if username == 'admin' and password == 'admin':
access_token = create_access_token(identity=username) # Создание токена
return {'access_token': access_token}, 200
else:
return {'message': 'Invalid credentials'}, 401
Мы получаем имя пользователя и пароль из запроса, проверяем их на валидность и, если они верны, создаем токен с помощью функции `create_access_token`. В этом примере мы используем имя пользователя в качестве идентификатора (identity) токена.
Получив токен, мы можем использовать его для доступа к защищенным маршрутам. Для передачи токена мы добавим заголовок `Authorization` в каждый запрос:
import requests
access_token = 'your-access-token'
headers = {
'Authorization': f'Bearer {access_token}'
}
response = requests.get('http://localhost:5000/protected', headers=headers)
print(response.text)
В приведенном выше примере мы отправляем GET-запрос на защищенный маршрут `/protected` с заголовком `Authorization`, содержащим токен. В ответ мы получаем сообщение «This is a protected route», что означает успешную авторизацию.
Flask-JWT-Extended предоставляет множество других функций, таких как установка срока действия токена, проверка прав доступа и т.д. Более подробную информацию можно найти в официальной документации Flask-JWT-Extended.
Таким образом, с помощью библиотеки Flask-JWT-Extended вы можете упростить процесс аутентификации и авторизации в веб-приложении Flask, используя JWT.