Tụi em tự viết hệ thống đăng nhập cho chủ động– Hay quá, vậy token có expiry không?– Ủa… cái đó là sao anh?
Tôi đã từng audit một sản phẩm Fintech nội bộ, phát hiện hệ thống auth “tự build cho nhanh” - không expiration, không revoke, không refresh token.
Ai login 1 lần thì token dùng cả năm, không cần renew. Lỡ token bị lộ thì… thôi, chấp nhận.
Vấn đề: Token “vô thời hạn”
Nhiều hệ thống tự viết auth, tạo token mà quên đặt expiry:
- Token JWT không có exp claim.
- Không có cơ chế revoke token khi user logout.
Hậu quả:
- Hacker tận dụng: Token bị lộ, hacker dùng mãi không cần đăng nhập lại.
- Khó kiểm soát: Không biết token nào đang active.
Giải pháp: Token có expiry và revoke
Để bảo mật:
- Dùng JWT có expiry: Đặt exp (thường 1 giờ) và refresh token (7-30 ngày).
- Revoke token: Lưu danh sách token đã logout vào Redis/blacklist.
- Rotate refresh token: Đổi refresh token định kỳ để tăng bảo mật.
Ví dụ: API /login trả {access_token, refresh_token}, với access_token hết hạn sau 1 giờ.
🎯 Bài học:
- Bảo mật không phải là thứ “làm sau cũng được”
- Nếu không có đội security chuyên, nên dùng các giải pháp sẵn như Cognito, Auth0, Keycloak
- Fractional CTO cần review kỹ Auth, IAM, và session lifecycle từ sớm
Token cần expiry và cơ chế revoke để bảo vệ hệ thống. Đừng để hacker “sống mãi” với token bị lộ.
Đăng nhận xét