Files
docs/docs/60-common-modules/auth/intro.md
T
2026-06-16 15:13:13 +03:00

5.4 KiB

Принцип и сценарии

Глоссарий

  • гость не аутентифицированный посетитель
  • пользователь аутентифицированный посетитель

Назначение и требования к токенам

Access token

  • Короткоживущий многоразовый токен
  • JWT
  • За счет короткого времени жизни дополнительной проверки не требуется

Refresh token

  • Предназначен для одноразового получения нового комплекта токенов
  • Токен должен храниться в базе данных и содержать следующую информацию:
    • Разрешение на генерацию токена
      • предыдущий refresh token
      • аутентификация пользователя
      • регистрация пользователя
  • Т.к. токен одноразовый и периодически обновляется, то нельзя использовать sessionStorage для его хранения

Технические сценарии

Гость на сайте

sequenceDiagram
    participant C as Client
    participant G as Gateway
    participant S as Server

    C->>G: Request without access token
    G->>S: Request without user info
    S->>G: Response
    G->>C: Response without tokens

Гость логинится

sequenceDiagram
    participant C as Client
    participant G as Gateway
    participant S as Server

    C->>S: Credentials
    Note over S: Check credentials
    alt valid and user active
        S->>C: access_token, refresh_token
    else invalid or user not active
        S-->>C: 422 error
    end

Гость регистрируется

sequenceDiagram
    participant C as Client
    participant G as Gateway
    participant S as Server

    C->>S: Credentials
    Note over S: Check for no access token
    Note over S: Check credentials
    alt valid and user active
        S->>C: Congratulation page with redirect on timeout to login
    else invalid or user not active
        S-->>C: 422 error
    end

Пользователь выполняет запрос с корректным токеном

sequenceDiagram
    participant C as Client
    participant G as Gateway
    participant S as Server

    C->>G: Request with access token
    Note over G: Check access token
    G->>S: Request with session data
    alt session data changed
        S->>G: Change sesstion data
        G->>C: Response with new access token
    else no sesstion changed
        S->>C: Response
    end

Пользователь выполняет запрос с некорректным токеном

sequenceDiagram
    participant C as Client
    participant G as Gateway
    participant S as Server

    C->>G: Request with access and refresh tokens
    Note over G: Check access token
    Note over G: Access token invalid
    Note over G: Check refresh token
    alt refresh token valid, user is active
        G->>S: Request with sesstion data
        S->>G: Response with/without session data
        Note over G: Create new tokens with session data
        G->>C: Response with new access and refresh tokens
    else refresh token expared
        G-->>C: 401 Token expired
    else refresh token already used
        Note left of G: Leak warning
        G-->>C: 419 Token already used, leak warning
    end

Если refresh token уже был ранее использован, то это может означать что токен ранее утек, потому пользователю надо об этом сообщить, и, возможно заблокировать все refresh token'ы, выпущенные благодаря потенциально утекшему

Пользователь обновляет токены

sequenceDiagram
    participant C as Client
    participant G as Gateway
    participant S as Server

    C->>G: Request with access and refresh tokens
    Note over G: Check refresh token
    alt refresh token valid, user is active
        Note over G: Create new tokens with session data from access token
        G->>C: Response with new access and refresh tokens
    else refresh token expared
        G-->>C: 401 Token expired
    else refresh token already used
        Note left of G: Leak warning
        G-->>C: 419 Token already used, leak warning
    end

Если refresh token уже был ранее использован, то это может означать что токен ранее утек, потому пользователю надо об этом сообщить, и, возможно заблокировать все refresh token'ы, выпущенные благодаря потенциально утекшему

Пользователь логинится

При переходе пользователя на страницу логина его перенаправляет на главную

Пользователь регистрируется

Регистрация недоступна для аутентифицированного пользователя