title

Spring Security là gì?

Spring Security là một framework được cung cấp bởi Spring cung cấp khả năng xác thực, bảo vệ, kiểm soát truy cập và có khả năng tuỳ biến cao. Tập trung chủ yếu vào Authentication và Authorization cho một ứng dụng Java.
Spring Security, chủ yếu tập trung vào xác thực và ủy quyền để cung cấp tất cả lợi ích cho các ứng dụng java. Nó rất hữu ích và cung cấp một cách tiếp cận dễ dàng để áp dụng trong các dự án thực tế.

Features:

  • Hỗ trợ authentication và authorization một cách toàn diện.
  • Ngăn chặn các nguy cơ bảo mật đến từ Cross-site Forgery, CSRF Attacks, ClickJacking,…
  • Hỗ trợ tích hợp với Spring Web MVC
  • Hỗ trợ tích hợp với Servlet API

Cách Spring Security hoạt động?

flow

Trong đó:

Authentication Filter:

Authentication Filter là một bộ lọc trong ứng dụng web, nó can thiệp vào các yêu cầu từ người dùng. Khi có request gửi đến, nhiệm vụ của nó là chuyển đổi thông tin xác thực. Kết quả là, chúng ta nhận được thông tin từ người dùng như tên người dùng và mật khẩu và đưa chúng vào đối tượng xác thực (Authentication object).
Authentication object là một đối tượng cơ bản có trách nhiệm kiểm tra thông tin xác thực của người dùng.

Authentication Manager

package springwebfluxdemo.security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UserDetailsRepositoryAuthenticationManager;
import org.springframework.security.core.userdetails.UserDetailsRepository;
import org.springframework.stereotype.Service;

@Service
public class AuthenticationManager extends UserDetailsRepositoryAuthenticationManager{
    public AuthenticationManager(
            @Autowired
            UserDetailsRepository userDetailsRepository) {
        super(userDetailsRepository);
    }
}

AuthenticationManager là một interface với method authenticate() làm nhiệm vụ xác định những Authentication providers phù hợp nhất để xử lý Authentication object nhận được từ filters. AuthenticationManager sẽ nhận kết quả authenticate từ Provider (Success hoặc Not success). Nếu không success, nó sẽ thử một provider phù hợp khác.

Authentication Provider

provider
AuthenticationProvider là những classes implement interface AuthenticationProvider với method authenticate() làm nhiệm vụ xử lý các logic liên quan đến authentication.

UserDetailsService:

UserD
UserDetailsService là interface chứa thông tin, schema của user details. Mặc định, Spring Security sẽ sử dụng class InMemoryUserDetailsManager, với method loadUserByUsername() để lấy ra thông tin của user từ memory của hệ thống.

PasswordEncoder:

Pw
PasswordEncoder là interface có nhiệm vụ encode, encrypt và decrypt password của user, validate và trả về kết quả valid/invalid cho Authentication Provider xử lý.

Security Context:

Sau khi Spring Security đã validate đủ, user details sẽ được lưu vào Security context. Ở lần truy cập tới, Spring sẽ lấy thông tin đã có trong context thay vì kiểm tra lại từ đầu như ở trên.

Tổng kết:

Như vậy bài viết này đã cung cấp cho các bạn một ví dụ về cách sử dụng Spring Security để tích hợp cơ chế xác thực cơ bản và phân quyền vào một ứng dụng Webflux dựa trên Spring Boot. Hi vọng qua bài viết này, bạn đọc nắm được các thành phần cơ bản cũng như cách thức hoạt động của Spring Security.