Что такое аутентификация в контексте веб-приложений?

Ответ

Аутентификация — это процесс проверки личности пользователя, чтобы убедиться, что он является тем, за кого себя выдает. Проще говоря, это ответ на вопрос «Кто ты?».

В веб-приложениях это обычно первый шаг для предоставления доступа к защищенным ресурсам.

Распространенные методы:

  • Пароли: Классический метод, где пользователь предоставляет логин и пароль.
  • Токены (JWT, OAuth): После успешного входа сервер выдает клиенту подписанный токен. Клиент прикрепляет этот токен к последующим запросам для подтверждения своей личности.
  • Биометрия: Использование отпечатков пальцев, распознавания лиц (например, через WebAuthn).
  • Многофакторная аутентификация (MFA): Требует подтверждения личности из нескольких источников (например, пароль + код из SMS).

Пример (упрощенный) с JWT в FastAPI:

from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer
import jwt # PyJWT

app = FastAPI()
SECRET_KEY = "your-super-secret-key"
ALGORITHM = "HS256"

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# Упрощенная функция для создания токена
@app.post("/token")
async def login(form_data: dict):
    # В реальном приложении здесь будет проверка пользователя в БД
    if form_data.get("username") == "user" and form_data.get("password") == "pass":
        token_data = {"sub": form_data.get("username")}
        encoded_jwt = jwt.encode(token_data, SECRET_KEY, algorithm=ALGORITHM)
        return {"access_token": encoded_jwt, "token_type": "bearer"}
    raise HTTPException(status_code=401, detail="Incorrect username or password")

# Защищенный эндпоинт
@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
    # Здесь будет декодирование и валидация токена
    return {"message": "Hello, authenticated user!"}

Важно: Не путать с авторизацией — процессом проверки прав доступа пользователя к определенным ресурсам (ответ на вопрос «Что тебе можно делать?»). Аутентификация всегда предшествует авторизации.