60 lines
2.1 KiB
Markdown
60 lines
2.1 KiB
Markdown
# Выбор схемы аутентификации
|
||
|
||
---
|
||
|
||
## Decision Tree
|
||
|
||
```mermaid
|
||
graph TD
|
||
A[Схема auth?] --> B{Нужен вход через соцсети?}
|
||
B -->|Нет| C[Email + пароль]
|
||
B -->|Да| D{OAuth2}
|
||
D --> E[Выбрать провайдеров]
|
||
C --> F[Выбрать JWT или Session]
|
||
F -->|SPA/PWA| G[JWT + refresh token]
|
||
F -->|SSR| H[Session + cookie]
|
||
```
|
||
|
||
---
|
||
|
||
## Варианты
|
||
|
||
### Email + пароль
|
||
| | |
|
||
|---|---|
|
||
| **Плюсы** | Простота, не зависит от third-party, полный контроль |
|
||
| **Минусы** | Пользователь должен помнить пароль, риск утечки |
|
||
| **Хэширование** | bcrypt через passlib |
|
||
|
||
### OAuth2 (Яндекс, Google, GitHub, Apple)
|
||
| | |
|
||
|---|---|
|
||
| **Плюсы** | Удобство для пользователя, нет паролей на нашей стороне |
|
||
| **Минусы** | Зависимость от провайдера, нужны client_id/secret, нужен публичный URL для callback |
|
||
| **Схема** | Один пользователь = один провайдер (нельзя привязать два) |
|
||
|
||
### JWT vs Session
|
||
|
||
| | JWT | Session |
|
||
|---|---|---|
|
||
| **Хранение** | На клиенте (localStorage) | На сервере (Redis/БД) |
|
||
| **Масштабирование** | Не нужна общая session storage | Нужен Redis |
|
||
| **Отзыв токена** | Сложно (до expire) | Мгновенно |
|
||
| **SPA/PWA** | Идеально | Сложнее |
|
||
|
||
---
|
||
|
||
## Рекомендация
|
||
|
||
**Email + пароль + JWT** для старта.
|
||
OAuth2 добавить перед production (если нужен).
|
||
JWT с refresh token для SPA/PWA, session для SSR.
|
||
|
||
---
|
||
|
||
## [ASK]
|
||
|
||
- Нужен ли вход через соцсети? (рекомендация: Яндекс для РФ, Google для международных)
|
||
- JWT или Session? (рекомендация: JWT + refresh token)
|
||
- Сколько провайдеров OAuth? (рекомендация: 1-2, не больше)
|