# 🔐 Cheatsheet: Xác thực và phân quyền: session, JWT và OAuth

By Better Wise

> This cheatsheet is premium content. Sign in and purchase the course to view the full content.

> **Note:** 
> Câu hỏi xuyên suốt: **token/session này ai giữ, sống bao lâu, bị lộ thì sao?**

---

## 1. Bảng quyết định nhanh: chọn cách đăng nhập

| Tình huống | Chọn | Lý do |
| --- | --- | --- |
| Web app render server (Next.js SSR, Rails, Django) | **Session + cookie** | Server thu hồi được ngay, không cần lưu token ở client |
| SPA + API riêng, cùng domain | Session + cookie hoặc JWT ngắn hạn | Cookie `HttpOnly` an toàn hơn `localStorage` |
| Mobile app / third-party client | **JWT access + refresh token** | Không có cookie jar ổn định, cần stateless |
| Cần logout tức thì mọi thiết bị | Session store hoặc refresh token có revoke | JWT thuần không thu hồi được |
| Microservices, nhiều service tin nhau | JWT access token ngắn hạn | Verify bằng public key, không gọi DB mỗi request |
| Chỉ cần "đăng nhập bằng Google" | OAuth 2.0 + Authorization Code + PKCE | Không tự quản mật khẩu |

**Quy tắc:** access token càng ngắn hạn càng tốt (5-15 phút). Refresh token dài hạn nhưng phải rotation + revoke.

---

## 2. Module 1.1: Session và cookie

### Session hoạt động thế nào

```mermaid
sequenceDiagram
    participant B as Browser
    participant S as Server
    participant D as Session Store
    B->>S: POST /login (email, password)
    S->>D: Tạo session_id, lưu userId
    S-->>B: Set-Cookie: sid=...; HttpOnly; Secure; SameSite
    B->>S: GET /me (Cookie: sid=...)
    S->>D: Tra session_id
    D-->>S: userId
    S-->>B: 200 dữ liệu user
```

### Thuộc tính cookie quan trọng

| Thuộc tính | Giá trị nên dùng | Ý nghĩa |
| --- | --- | --- |
| `HttpOnly` | luôn bật | JS không đọc được, chặn đánh cắp qua XSS |
| `Secure` | luôn bật ở production | Chỉ gửi qua HTTPS |
| `SameSite` | `Lax` (mặc định) hoặc `Strict` | Chặn CSRF cơ bản |
| `SameSite=None` | chỉ khi cross-site thật | Bắt buộc kèm `Secure` |
| `Path` | `/` | Phạm vi gửi cookie |
| `Max-Age` / `Expires` | theo TTL session | Cookie hết hạn cùng session |

### Checklist session
