Token authentication có thể hiểu là việc Xác thực mã thông báo. Thông qua tính năng này, người dùng có thể thực hiện kiểm soát truy cập thông qua các tham số URL (URL parameters) hoặc tiêu đề yêu cầu HTTP (HTTP request headers) mà không cần phải xây dựng các hệ thống phụ trợ (back-end systems) phức tạp. Lấy nền tảng VNIS (VNIS platform) làm ví dụ, chúng tôi sẽ kiểm tra các Mã thông báo (Token) tại Tường lửa ứng dụng web (WAF) trước khi bất kỳ yêu cầu (request) nào được chuyển tiếp đến máy chủ gốc (origin). Nếu Token không hợp lệ, request sẽ bị chặn. Vì VNIS xử lý tất cả Token authentication nên máy chủ gốc không cần phải có logic xác thực phức tạp. Ngoài ra, một người dùng độc hại (malicious user) cố gắng giả mạo Token sẽ bị chặn truy cập origin.
- Token Authentcation giúp bảo vệ API – Ngày nay, hầu hết các ứng dụng là phần mềm máy khách (client software) kết nối đến HTTP dựa trên API qua Internet. Việc bảo vệ các API khỏi các truy cập xấu là rất quan trọng. Chúng ta cần ngăn chặn việc lạm dụng và tải trái phép dữ liệu trên máy chủ API.
- Token Authentcation hỗ trợ dịch vụ WebSocket – WebSocket là một giao thức truyền thông máy tính, cung cấp các kênh truyền thông song công đầy đủ (full-duplex) qua một kết nối TCP. Giao thức WebSocket (WebSocket protocol) đã được IETF chuẩn hóa thành RFC 6455 vào năm 2011. API WebSocket trong Web IDL đang được W3C chuẩn hóa. WebSocket là một giao thức khác với HTTP nhưng mang trong lớp HTTP. Nó được sử dụng rộng rãi trong nhiều ứng dụng web cần giao tiếp giữa máy khách/máy chủ theo thời gian thực (real-time) và full-duplex, chẳng hạn như p2p game, bot công nghiệp như điều khiển từ xa bằng máy bay không người lái, v.v. Token authentication có thể được sử dụng để xác thực API hoặc WebSocket request từ user hợp lệ, client hoặc thiết bị di động ở biên (edge). VNIS sẽ lọc ra các request không được xác thực (non-authenticated) hoặc giả mạo và không chuyển chúng đến máy chủ API gốc (origin API server).
- Các tình huống khác – Token authentication có thể được coi là một loại Cơ chế kiểm soát truy cập (Access Control Mechanism). Nó có thể được sử dụng để kiểm soát quyền truy cập vào tài nguyên web của bạn như tài liệu nội bộ, liên kết không thể chia sẻ (non-referable links), đặc biệt là nội dung tĩnh như hình ảnh, PDF, tệp zip, ứng dụng (app), sách điện tử (eBook) và những nội dung có thể tải xuống khác.
Token authentication tận dụng các Token để xác minh rằng người dùng có quyền truy cập vào một tài nguyên cụ thể. Token có thể được gửi dưới dạng tham số (parameter) URL hoặc trong tiêu đề (header) HTTP. Dưới đây là ba phương thức Token authentication được sử dụng rộng rãi:
- Xác thực khóa (Key authentication) - Một khóa trong tham số chuỗi truy vấn (query string parameter) hoặc tiêu đề (header) giúp xác thực các request. Token của khóa xác thực được tạo từ:
- Xác thực chữ ký HMAC (HMAC authentication) - Phương pháp này sẽ xác thực chữ ký điện tử được gửi trong Proxy-Ủy quyền (Proxy-Authorization) hoặc Tiêu đề Ủy quyền (Authorization header). Việc triển khai dựa trên bản nháp draft-cavage-http-signatures với lược đồ chữ ký chỉ khác một ít. Token là một HMAC được tạo từ:
- Xác thực JWT - (JWT authentication) – Xác minh các request chứa HS256 hoặc RS256 được ký JSON Web Tokens - viết tắt là JWT (theo quy định trong RFC 7519 - một tiêu chuẩn mở). Mỗi API hoặc WebSocket của bạn sẽ có thông tin đăng nhập JWT (khóa công khai và khóa bí mật) cần được sử dụng để ký JWT.
VNIS sẽ ủy quyền request cho các dịch vụ upstream nếu chữ ký của Token được xác minh hoặc hủy request nếu không được xác minh. VNIS cũng có thể thực hiện xác minh đối với một số xác nhận quyền sở hữu đã đăng ký RFC 7519.
Việc triển khai Token authentication có thể được thực hiện qua một số bước. Lấy xác thực JWT làm ví dụ:
const jwt_key = "yourjwtkey"
const jwt_secret = "yourjwtsecret"
const jwt_secret = "yourjwtsecret"
var jwt = require('jwt-simple')
var uuid = require('uuid')
function genJWT(user_fields) {
var payload = {
iat: (new Date().getTime() / 1000),
jti: uuid.v4(),
iss: jwt_key,
user_fields: user_fields
}
var token = jwt.encode(payload, jwt_secret)
return token
} //end gen jwt
var user_fields = {
customer: 'VNIS',
}
var token = genJWT(user_fields)
var link = 'yoururl?jwt=' + token;
Tính năng xác thực token sẽ sớm có trên VNIS.
- Tấn công phát lại (Replay attack hoặc playback attack) – Đây là một hình thức tấn công mạng trong đó việc truyền dữ liệu hợp lệ bị lặp lại hoặc trì hoãn một cách ác ý hoặc gian lận. Sau đây là các biện pháp phòng ngừa và đối phó:
- Độ lệch của đồng hồ (Clock skew) – Xác thực HMAC/JWT giúp kiểm tra độ lệch của đồng hồ như được mô tả trong thông số kỹ thuật, từ đó ngăn chặn các cuộc tấn công phát lại. Theo mặc định, mức độ cho phép độ trễ tối thiểu là 300 giây theo cả hai hướng (quá khứ/tương lai). Mọi request có giá trị ngày cao hơn hoặc thấp hơn sẽ bị từ chối. Server và request client phải được đồng bộ hóa với NTP (Network Time Protocol) và ngày hợp lệ (sử dụng định dạng GMT - Greenwich Mean Time).
Bài viết liên quan