# Выбор схемы аутентификации --- ## 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, не больше)