Класс OAuth2PasswordBearer
Класс OAuth2PasswordBearer применяется для защиты маршрутов
с помощью OAuth2-аутентификации по паролю.
Первым параметром передаётся tokenUrl - адрес,
на который клиент отправляет логин и пароль для получения токена.
Класс является вызываемым объектом: при добавлении его в зависимость
через Depends он извлекает токен из заголовка
Authorization с типом Bearer и возвращает его строкой.
Если токен отсутствует, возвращается ошибка 401.
Синтаксис
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')
Пример
Давайте создадим схему OAuth2PasswordBearer
и защитим маршрут, возвращающий токен:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')
@app.get('/users/me')
def read_users_me(token: str = Depends(oauth2_scheme)):
return {'token': token}
Результат выполнения кода для токена 'abcde':
{"token": "abcde"}
Пример
Давайте добавим маршрут /token,
который принимает логин и пароль через форму
и возвращает токен доступа:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token')
@app.post('/token')
def login(form_data: OAuth2PasswordRequestForm = Depends()):
return {'access_token': form_data.username, 'token_type': 'bearer'}
@app.get('/users/me')
def read_users_me(token: str = Depends(oauth2_scheme)):
return {'token': token}
Результат выполнения кода для пользователя 'user':
{"access_token": "user", "token_type": "bearer"}
Пример
Давайте отключим автоматическую ошибку
через параметр auto_error
и вернём None при отсутствии токена:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='token', auto_error=False)
@app.get('/users/me')
def read_users_me(token: str = Depends(oauth2_scheme)):
if token is None:
return {'message': 'no token'}
return {'token': token}
Результат выполнения кода без заголовка Authorization:
{"message": "no token"}
Смотрите также
-
класс
OAuth2PasswordRequestForm,
который принимает логин и пароль из формы -
функция
Depends,
которая внедряет зависимость в обработчик -
класс
OAuth2,
который описывает базовую схему OAuth2 -
метод
call,
который извлекает токен из запроса