System Design
Security
Authentication vs Authorization
**Authentication (AuthN)** - КТО ты? - Подтверждение личности - Login, password, MFA - Результат: identity (user_id) **Authorization (AuthZ)** - ЧТО тебе можно? - Проверка прав доступа - Roles, permissions - Результат: allow/deny
**Методы Authentication:** | Метод | Описание
| **Session** | Cookie с session_id | Web apps (same domain) | | **JWT** | Stateless token | API, mobile, microservices | | **API Key** | Статический ключ | Server-to-server, public APIs | | **OAuth 2.0** | Делегированный доступ | "Login with Google" | | **mTLS** | Mutual certificates | Service mesh, zero trust |
Что вы узнали о Authentication vs Authorization?
OAuth 2.0 и OpenID Connect
**OAuth 2.0 - протокол делегированной авторизации** Позволяет приложению получить ограниченный доступ к ресурсам пользователя БЕЗ передачи пароля. **Роли:** - **Resource Owner** - пользователь - **Client** - приложение, запрашивающее доступ - **Authorization Server** - Google, GitHub, Auth0 - **Resource Server** - API с данными пользователя
**OAuth 2.0 Grant Types:** | Grant
| **Authorization Code** | Web apps с backend (самый безопасный) | | **Authorization Code + PKCE** | Mobile/SPA (нет client_secret) | | **Client Credentials** | Server-to-server (нет пользователя) | | **Refresh Token** | Обновление access token без re-login | | ~~Implicit~~ | ❌ Deprecated - используйте PKCE | | ~~Password~~ | ❌ Deprecated - не передавайте пароли |
Что вы узнали о OAuth 2.0 и OpenID Connect?
JWT (JSON Web Token)
**JWT - самодостаточный token** Содержит всю информацию для validation: - Не нужно обращаться к БД - Stateless authentication - Подписан криптографически Структура: `header.payload.signature`
**JWT Validation Checklist:**
**JWT Best Practices:** ✅ DO: - Use RS256 (asymmetric) for microservices - Set short expiration (15 min) - Validate ALL claims (exp, iss, aud) - Store refresh token in httpOnly cookie ❌ DON'T: - Store JWT in localStorage (XSS vulnerable) - Put sensitive data in payload (it's readable) - Use "none" algorithm - Make tokens too long-lived
Что вы узнали о JWT (JSON Web Token)?
Authorization Patterns
**RBAC - Role-Based Access Control** Пользователь → Роль → Permissions
**Плюсы:** простота, понятность **Минусы:** role explosion, нет контекста ("свои" vs "чужие" записи)
**ABAC - Attribute-Based Access Control** Решение на основе атрибутов: - User attributes (department, clearance) - Resource attributes (owner, classification) - Environment (time, location, device) - Action (read, write, delete) **Policy:** `IF user.department == resource.department AND time.hour BETWEEN 9-18 THEN allow`
**ReBAC - Relationship-Based Access Control** Используется в Google Docs, GitHub, Notion.
Google Zanzibar - система для ReBAC в масштабе.
Что вы узнали о Authorization Patterns?
API Security
**OWASP API Security Top 10:** 1. **Broken Object Level Authorization** (BOLA) - GET /api/users/123 → можно менять ID? - Всегда проверять: user owns resource? 2. **Broken Authentication** - Weak passwords, no brute-force protection 3. **Excessive Data Exposure** - API возвращает ВСЕ поля, включая sensitive 4. **Lack of Rate Limiting** - DDoS, brute-force, scraping
**API Security Checklist:**
Что вы узнали о API Security?
Data Security
**Encryption: At Rest vs In Transit** **In Transit:** данные в сети - TLS/HTTPS - mTLS для service-to-service **At Rest:** данные в storage - Database encryption (AES-256) - Disk encryption - Application-level encryption
**Secrets Management:** НЕ храните секреты в: - ❌ Коде (git history!) - ❌ Environment variables в Dockerfile - ❌ Config files в репозитории Используйте: - ✅ HashiCorp Vault - ✅ AWS Secrets Manager - ✅ Azure Key Vault - ✅ Kubernetes Secrets + External Secrets Operator
**Password Storage:**
Что вы узнали о Data Security?