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?

Связанные уроки

  • sec-01
Security

0

1

Войти