Bài viết này cung cấp hướng dẫn chi tiết về cách tích hợp Keycloak để xác thực và phân quyền trên Resource Server sử dụng Java. Việc tích hợp sử dụng các giao thức OAuth 2.0 và OpenID Connect, với Keycloak đóng vai trò là Identity Provider (IdP). Ứng dụng Java hoạt động như một Resource Server, chịu trách nhiệm xác thực Access Token.

Điều kiện cần thiết để tích hợp Keycloak

Trước khi bắt đầu, hãy đảm bảo bạn đã chuẩn bị: 

  • Keycloak đã được cài đặt và đang hoạt động (trực tiếp hoặc thông qua Docker).
  • Một Một Keycloak Realm và khách hàng được cấu hình cho cả ứng dụng Backend và Frontend.
  • Một Java (Spring Boot) project cho Backend.
  • Kiến thức cơ bản về các giao thức OAuth 2.0/OpenID Connect. 

Triển khai tích hợp Keycloak

Thiết lập Keycloak

Bước 1: Tạo một Keycloak Realm.

  1. Đăng nhập vào Keycloak Admin Console.
  1. Từ thanh bên, nhấn “Add Realm”.
  1. Nhập tên Realm (ví dụ: authentication), sau đó nhấn Save.

Bước 2: Tạo Client cho Java Resource Server 

  1. Chọn Realm mà bạn muốn thiết lập.
  1. Truy cập Clients và nhấn “Create client”
  1. Nhấn “Create”
  1. Cấu hình Client với các thông tin sau:

Tại phần General Settings: 

    • Client type: OpenID Connect
    • Client ID: Nhập Client ID của bạn (ví dụ: custom-authentication) 

Tại phần Capability Config: Giữ nguyên các thiết lập mặc định. 

  1. Tạo Role cho quy trình phân quyền trong Spring Boot:

Keycloak cung cấp cơ chế thuận tiện để tạo Role, gán Role cho User và quản lý quyền của ứng dụng một cách hiệu quả. Trong Keycloak, có hai loại Role chính 

    • Client Roles:Các Role dành riêng cho một Client cụ thể. Client được tạo trong giao diện quản trị Keycloak và Role có thể được gán cho User trong phạm vi Client đó.
    • Realm Roles:Các Role áp dụng cho toàn bộ Realm, có thể đại diện cho một domain ứng dụng thực tế hoặc logic. Realm Role có thể được áp dụng cho tất cả Client trong Realm và gán cho User trên toàn bộ Realm. 

Ngoài ra,Keycloak còn hỗ trợ Composite Roles.Composite Role không phải là một loại Role riêng, mà là một Role đặc biệt bao gồm nhiều quyền (Authority) khác nhau. 

Đây không phải là một loại Role riêng mà là một Role đặc biệt bao gồm nhiều quyền khác nhau[manage_customer]vàmanage_staffđể quản lý Customer và Staff. Để thực hiện, chọn Client mà tôi đã tạo (custom-authentication) và sau đó click vào Create role :

Role được tạo trong Client sẽ có trạng thái Composite mặc định là False.

Sau đó, chúng ta sẽ tạo hai Realm Role. Để thực hiện, truy cập trang Realm Roles và tiến hành tạo các Role.

Tiếp theo, tạo Operation Role và liên kết Role này với hai Client Role đã tạo ở bước trước.

  1. Tạo User

Phần cuối cùng cần thiết lập là User. Truy cập trang Users, tạo hai User và gán Realm Role tương ứng:

Customer-management admin: gán Role [manage_customer]

Staff-management admin: gán Role manage_staff

Thiết lập Java Resource Server

Bước 1: Thêm Dependencies

Trong file pom.xml, thêm các dependency cần thiết cho Keycloak và Spring Security.

Bước 2: Cấu hình application.yml

Bước 3: Cấu hình Spring Security cho Resource Server
Tạo class SecurityConfig để cấu hình bảo mật và thiết lập Role cho hai Resource là manage_customer và manage_staff

Bước 4: Kiểm thử Controller

Tạo hai Controller mẫu để quản lý Staff và Customer. Prefix của các Controller phải khớp với cấu hình đã định nghĩa trong class SecurityConfig.

Cuối cùng, bằng cách đọc kỹ bài viết và thực hiện từng bước theo hướng dẫn trên, tôi tin rằng bạn có thể tự triển khai tích hợp Keycloak với Java Resource Server. Nếu bạn cần đội ngũ triển khai dự án liên quan đến Keycloak, hãy tìm hiểu thêm về dịch vụ của chúng tôi. Custom Web/App Implementation Service và hãy liên hệ. Chúng tôi luôn sẵn sàng hỗ trợ bạn!