Người Gác Cổng Tin Cậy
Phần này giới thiệu các khái niệm cốt lõi của Spring Security. Bạn sẽ hiểu được Spring Security là gì, vai trò của nó trong các ứng dụng hiện đại, và phân biệt rõ hai trụ cột của bảo mật: Xác thực (Authentication) và Phân quyền (Authorization).
Authentication (Xác thực)
"Bạn là ai?"
Là quá trình xác minh danh tính của người dùng. Spring Security kiểm tra thông tin đăng nhập (như username/password, token, OTP) để đảm bảo người dùng là thật và hợp lệ trước khi cho phép họ vào hệ thống.
Authorization (Phân quyền)
"Bạn được làm gì?"
Sau khi đã xác thực, đây là quá trình quyết định các quyền hạn của người dùng. Spring Security xác định xem người dùng có được phép truy cập một tài nguyên cụ thể hay thực hiện một hành động nào đó hay không (ví dụ: chỉ `ADMIN` mới được xóa sản phẩm).
Session-based vs. Token-based (JWT)
Hai phương pháp xác thực phổ biến với những đặc điểm riêng, phù hợp cho các kiến trúc ứng dụng khác nhau. Biểu đồ dưới đây so sánh chúng dựa trên các tiêu chí quan trọng.
Kiến Trúc Cốt Lõi
Khám phá cách các thành phần chính của Spring Security phối hợp với nhau để bảo vệ ứng dụng của bạn. Nhấp vào từng khối trong sơ đồ để xem chi tiết vai trò của chúng trong luồng xử lý yêu cầu.
Nhấp vào một thành phần trong sơ đồ để xem mô tả chi tiết.
Các Phương Thức Xác Thực
Spring Security hỗ trợ nhiều cơ chế xác thực. Hãy cùng tìm hiểu về các phương thức phổ biến, từ Form Login truyền thống đến JWT hiện đại cho microservices.
Case Study: Hệ Thống Đặt Món Ăn
Áp dụng các khái niệm đã học vào một kiến trúc microservices thực tế. Sơ đồ này minh họa luồng xác thực và phân quyền sử dụng API Gateway và JWT, một mô hình phổ biến và hiệu quả.
Client (SPA/Mobile)
API Gateway
Xác thực JWT
Auth Service
Phát hành Token
Order Service
Phân quyền chi tiết
Trong mô hình này, API Gateway đóng vai trò là lớp bảo vệ đầu tiên, xác thực tất cả các yêu cầu đến. Chỉ những yêu cầu hợp lệ mới được chuyển tiếp đến các microservice nghiệp vụ, giúp giảm tải và tăng cường bảo mật cho toàn hệ thống.
Thực Tiễn Tốt Nhất
Một danh sách các khuyến nghị quan trọng để xây dựng một ứng dụng không chỉ mạnh mẽ mà còn thực sự an toàn.
Luôn mã hóa mật khẩu
Sử dụng `BCryptPasswordEncoder` hoặc các thuật toán mạnh tương đương. Không bao giờ lưu mật khẩu dạng văn bản thô.
Sử dụng HTTPS
Bảo vệ dữ liệu trên đường truyền, đặc biệt là khi gửi token hoặc thông tin đăng nhập.
JWT: Thời gian sống ngắn & Refresh Token
Giảm thiểu rủi ro nếu Access Token bị lộ. Lưu Refresh Token an toàn (ví dụ: HttpOnly cookie).
Nguyên tắc đặc quyền tối thiểu
Chỉ cấp cho người dùng những quyền hạn thực sự cần thiết để thực hiện công việc của họ.
Bảo vệ chống CSRF và XSS
Bật bảo vệ CSRF cho ứng dụng stateful. Luôn xác thực đầu vào và mã hóa đầu ra để chống XSS.