Hai token đi theo một vòng đời đơn giản: access token ngắn hạn cấp quyền cho mỗi lời gọi API, và refresh token dài hạn âm thầm tạo access token mới khi chúng hết hạn — nhờ đó người dùng vẫn đăng nhập mà không cần nhập lại thông tin.
Luồng hoạt động
┌─────────┐ . login (user + pass) ┌────────────┐
│ Client │ ────────────────────────▶ │ Auth server│
│ │ ◀──── access + refresh ─── │ │
└─────────┘ └────────────┘
│ . ọ API: Authorization: Bearer <access>
▼
┌────────────┐ xác thực chữ ký + exp (không tra DB)
│ Resource │ ──── OK ────▶ (access còn hạn)
│ API │ ──── ───────▶ (access hết hạn)
└────────────┘
│ . khi : POST /token { refresh }
▼
┌────────────┐ ác ực + xoay vòng
│ Auth server│ ──── access mớ (+ refresh mớ) ────▶ ọ lạ
└────────────┘
