📝 Fastapi

OAuth2 Bearer в FastAPI

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
107
📊
Уровень
Статья
🐦 💼 ✈️

OAuth2PasswordBearer — схема аутентификации через Bearer токен в FastAPI.

Схема OAuth2

from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from fastapi import Depends, HTTPException

# tokenUrl — URL для получения токена
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/token")

Форма входа (OAuth2PasswordRequestForm)

from fastapi import APIRouter
from fastapi.security import OAuth2PasswordRequestForm

router = APIRouter(prefix="/auth")

@router.post("/token")
def login(form_data: OAuth2PasswordRequestForm = Depends()):
    # form_data.username
    # form_data.password
    user = authenticate(form_data.username, form_data.password)
    if not user:
        raise HTTPException(status_code=401, detail="Неверные данные")

    token = create_token(user.id)
    return {
        "access_token": token,
        "token_type": "bearer",  # обязательно!
    }

Использование токена в запросе

# Получить токен
curl -X POST /auth/token \
  -F "username=user" \
  -F "password=pass"

# Использовать токен
curl /api/tasks/ \
  -H "Authorization: Bearer eyJhbGci..."

Извлечение токена в endpoint

@app.get("/tasks/")
async def list_tasks(token: str = Depends(oauth2_scheme)):
    # token — сырая строка токена
    user = decode_token(token)
    return get_tasks(user)

Опциональная аутентификация

from fastapi.security import OAuth2PasswordBearer
from fastapi import Depends

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token", auto_error=False)

@app.get("/tasks/")
def list_tasks(token: str | None = Depends(oauth2_scheme)):
    if token:
        user = decode_token(token)
        return get_user_tasks(user)
    return get_public_tasks()

Refresh токены

class TokenResponse(BaseModel):
    access_token: str
    refresh_token: str
    token_type: str = "bearer"
    expires_in: int

@router.post("/token", response_model=TokenResponse)
def login(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate(form_data.username, form_data.password)
    return {
        "access_token": create_access_token(user.id),
        "refresh_token": create_refresh_token(user.id),
        "expires_in": 1800,
    }

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

JWT токены с python-jose

python-jose — библиотека для работы с JSON Web Tokens (JWT).

📅 30.06.2026 👁️ 112
📝

Middleware и CORS в FastAPI

Позволяет браузерным клиентам обращаться к API с другого домена.

📅 30.06.2026 👁️ 90
📝

HTTPException в FastAPI

Охватываемые темы: Базовое использование, Коды статуса, Детали ошибки, Кастомные заголовки.

📅 30.06.2026 👁️ 91

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!