JWT Policy
Tổng Quan
Chính sách JWT (JSON Web Token) được sử dụng để xác thực token được bao gồm trong các yêu cầu API. Nó đảm bảo rằng chỉ những người dùng có token hợp lệ, được tạo ra bằng cách sử dụng JWT KEY và SECRET đúng của dự án, mới có thể truy cập API.
Chính sách này hỗ trợ xác thực token dựa trên các đường dẫn đã chọn bằng cách sử dụng chế độ RequiredPath hoặc NotRequiredPath. Ngoài ra, nó có thể được kết hợp với chức năng tokenBlacklistLogoutPath để vô hiệu hóa token khi đăng xuất.
Các Thuật Toán Hỗ Trợ:
- HS256 (HMAC SHA-256)
- RS256 (RSA SHA-256)
Quy Tắc Token JWT
Để xác thực thành công một token JWT trong APIM:
- Token JWT phải được bao gồm trong tiêu đề Authorization:
Authorization: bearer JWT_TOKEN
- Payload của token phải chứa:
- "apim_key_claim_name" với JWT KEY của dự án.
- "exp" trường để chỉ định thời gian hết hạn của token.
Ví dụ Payload:
"apim_key_claim_name": "64c44d593be841bcec7fe768184e4c7e",
"exp": 1900000000
Ví dụ Tiêu Đề:
"alg": "HS256",
"typ": "JWT"
Token JWT Mẫu:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGltX2tleV9jbGFpbV9uYW1lIjoiNjRjNDRkNTkzYmU4NDFiY2VjN2ZlNzY4MTg0ZTRjN2UiLCJleHAiOjE5MDAwMDAwMDB9.1kB5k-vM2Cef7ZYTyJUQ-LsDUmG4K7sJUfrJ3FqgYxQ
Chi Tiết Cấu Hình
Khớp Đường Dẫn JWT
Xác minh JWT có thể được áp dụng cho các đường dẫn đã chọn bằng cách sử dụng hai chế độ:
Option | Description |
---|---|
RequiredPath | Áp dụng xác thực JWT chỉ cho các cặp phương thức/đường dẫn được liệt kê. Tất cả các đường dẫn khác sẽ không yêu cầu JWT. |
NotRequiredPath | Áp dụng xác thực JWT cho tất cả các đường dẫn ngoại trừ những đường dẫn được liệt kê. |
Chỉ một chế độ (RequiredPath hoặc NotRequiredPath) có thể được sử dụng tại một thời điểm. Chuyển đổi chế độ sẽ đặt lại các cài đặt trước đó.
Định Dạng Đầu Vào:
Method_Path
Ví dụ:
GET_/v1/test
Áp dụng cho các yêu cầu GET tại /v1/test
POST_/v1/example
Áp dụng cho POST tại /v1/example
ANY_/v1/apis
Áp dụng cho tất cả các phương thức HTTP tại /v1/apis
GET_/v1/apis*
Áp dụng cho tất cả các đường dẫn con dưới /v1/apis (ví dụ: /v1/apis/a)
tokenBlacklistLogoutPath
Tính năng này cho phép APIM đưa một token JWT vào danh sách đen khi có yêu cầu đăng xuất và trả về thành công HTTP 200 từ API Gateway.
Toggle Field:
Field | Description |
---|---|
useJWTBlacklistRevoking | Khi được kích hoạt, các token JWT sẽ được thêm vào bộ nhớ danh sách đen khi có phản hồi đăng xuất. Điều này ngăn chặn việc sử dụng token đó nữa. |
Không thể thay đổi: Chuyển đổi để ngăn chính sách này bị xóa.
Không thể thay đổi giá trị cài đặt: Chuyển đổi để ngăn thay đổi các giá trị cấu hình sau khi thiết lập.
Redis Configuration (used to store blacklisted tokens)
Tùy chọn 1: APIMRedis - Redis hệ thống mặc định; không cần cấu hình thủ công.
Tùy chọn 2: CustomRedis
Configuration Field | Description |
---|---|
Redis Host | Địa chỉ của máy chủ Redis (ví dụ: 127.0.0.1). |
Redis Port | Số cổng của máy chủ Redis (ví dụ: 6379). |
Redis Password | Mật khẩu để xác thực. |
Redis Database | Chỉ định chỉ số cơ sở dữ liệu nào để sử dụng (ví dụ: 1). |
Redis Pool Size | Số lượng kết nối tối đa trong pool kết nối Redis (mặc định: 1000). |
Redis Pool Backlog | Số lượng yêu cầu tối đa đang chờ một kết nối khả dụng (mặc định: 30). |
Tùy chọn 3: RedisCluster
Configuration Field | Description |
---|---|
Redis Cluster Nodes | Địa chỉ nút cụm (ví dụ: redis-cluster.apim:6379). |
Redis Cluster Password | Mật khẩu để xác thực. |
Redis Cluster Name | Chỉ định tên cụm (ví dụ: kong_redis_cluster). |
Redis Connect Timeout | Thời gian chờ để thiết lập kết nối Redis (mặc định: 1000ms). |
Redis Read Timeout | Thời gian chờ để đọc dữ liệu từ Redis (mặc định: 1000ms). |
Redis Send Timeout | Thời gian chờ để gửi dữ liệu đến Redis (mặc định: 1000ms). |
Redis Pool Size | Số lượng kết nối tối đa trong pool kết nối Redis (mặc định: 1000). |
Redis Pool Backlog | Số lượng kết nối đang chờ tối đa (mặc định: 30). |
Redis Keepalive Timeout | Thời gian nhàn rỗi tối đa trước khi kết nối Redis bị đóng (mặc định: 55000ms). |