# JWT Lifecycle

Hệ thống sử dụng tiêu chuẩn **HS256** thông qua thư viện `PyJWT` để tạo và xác thực token. Khác với tài liệu cũ, hệ thống hiện tại thiết lập thời gian sống của token là **24 giờ** (1440 phút) thay vì 7 ngày. Quá trình cấu hình được kiểm soát bởi biến môi trường `AUTH_SECRET_KEY`.

## Cấu trúc Payload
Một Access Token sau khi decode sẽ bao gồm các thông tin:
- `sub`: ID định danh duy nhất của người dùng (`user_id`).
- `username`: Tên đăng nhập.
- `role`: Quyền hạn (ví dụ: `admin`, `editor`).
- `exp`: Thời gian hết hạn của token.

## Quy trình sinh và xác thực JWT

```mermaid
sequenceDiagram
    participant Client
    participant AuthMiddleware
    participant AuthModule
    participant PostgreSQL

    %% Login Flow
    Client->>AuthModule: POST /api/auth/login (username, password)
    AuthModule->>PostgreSQL: Verify credentials (bcrypt)
    PostgreSQL-->>AuthModule: User data
    AuthModule->>AuthModule: create_access_token(user_id, username, role)
    AuthModule-->>Client: Returns JWT (expires in 24h)

    %% API Request Flow
    Client->>AuthMiddleware: API Request + Header `Authorization: Bearer <token>`
    AuthMiddleware->>AuthMiddleware: decode_access_token(token)
    alt Token expired / invalid
        AuthMiddleware-->>Client: 401 Unauthorized (Token expired or invalid)
    else Token valid
        AuthMiddleware->>PostgreSQL: SELECT id, username, role, settings FROM admin_users
        PostgreSQL-->>AuthMiddleware: User details
        AuthMiddleware->>AuthMiddleware: Check role (require_admin, require_editor_or_admin)
        AuthMiddleware-->>Client: Trả về thông tin User / Cho phép request
    end
```
