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

158 lines
5.4 KiB
Markdown

# Принцип и сценарии
## Глоссарий
- **гость** не аутентифицированный посетитель
- **пользователь** аутентифицированный посетитель
## Назначение и требования к токенам
### Access token
- Короткоживущий многоразовый токен
- JWT
- За счет короткого времени жизни дополнительной проверки не требуется
### Refresh token
- Предназначен для одноразового получения нового комплекта токенов
- Токен должен храниться в базе данных и содержать следующую информацию:
- Разрешение на генерацию токена
- предыдущий refresh token
- аутентификация пользователя
- регистрация пользователя
- Т.к. токен одноразовый и периодически обновляется, то нельзя использовать sessionStorage для его
хранения
## Технические сценарии
### Гость на сайте
```mermaid
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
```
### Гость логинится
```mermaid
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
```
### Гость регистрируется
```mermaid
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
```
### Пользователь выполняет запрос с корректным токеном
```mermaid
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
```
### Пользователь выполняет запрос с некорректным токеном
```mermaid
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'ы, выпущенные
благодаря потенциально утекшему
### Пользователь обновляет токены
```mermaid
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'ы, выпущенные
благодаря потенциально утекшему
### Пользователь логинится
При переходе пользователя на страницу логина его перенаправляет на главную
### Пользователь регистрируется
Регистрация недоступна для аутентифицированного пользователя