0

Giới thiệu về Keycloak - Giải pháp cho quản lý đăng nhập, xác thực và phân quyền

Lý thuyết

Giới thiệu tổng quan

Keycloak là một giải pháp quản lý danh tính tập trung, do Red Hat phát triển, hỗ trợ

  • Single Sign-On (SSO): Người dùng chỉ cần đăng nhập một lần để truy cập nhiều ứng dụng.
  • OAuth2, OIDC, SAML 2.0: Đầy đủ các tiêu chuẩn xác thực hiện đại.
  • User Management: Tạo user, nhóm, vai trò, đặt password policy, khóa tài khoản, TOTP/2FA…
  • Identity Brokering & Social Login: Cho phép đăng nhập bằng Google, Facebook, GitHub…
  • Client & Resource Permissions (RBAC/ABAC): Phân quyền theo role hoặc theo resource.
  • Admin Console & Account Console: Giao diện trực quan giúp quản lý dễ dàng.

Các thành phần chính của Keycloak

  • Realm – Tập hợp user, client, role, policy (giống 1 tenant)
  • Client – Ứng dụng kết nối với Keycloak (web, backend, mobile)
  • Users – Tài khoản người dùng
  • Roles/Groups – Phân quyền
  • Identity Providers – Google, SAML IdP, Azure AD…
  • User Federation – Kết nối LDAP/AD để đồng bộ user

Thực hành

Chạy Keycloak với Docker và kết nối với Database riêng

Chuẩn bị: Máy có cài docker

File docker-compose.yml:

services:
  maria-db:
    image: mariadb:12.0
    container_name: mariadb
    ports: 
      - "3307:3306"
    environment:
      MARIADB_ROOT_PASSWORD: secret
      MARIADB_DATABASE: keycloak
      MARIADB_USER: keycloak
      MARIADB_PASSWORD: secret
    networks:
      - keycloak-network

  keycloak:
    image: quay.io/keycloak/keycloak:26.4.4
    container_name: keycloak
    ports: 
      - "8080:8080"
    command: start-dev
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
      KC_DB: mariadb
      KC_DB_URL: jdbc:mariadb://mariadb:3306/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: secret
      KC_HTTP_ENABLED: "true"
      KC_HOSTNAME_STRICT: "false"
      KC_PROXY: "edge"
    depends_on:
      - maria-db
    networks: 
     - keycloak-network

networks:
  keycloak-network:
    driver: bridge
  

Giải thích:

  • Trong file docker-compose trên chúng ta khai báo 2 container là: mariadb và keycloak
  • Trong mục enviroment của keycloak, chúng ta khai báo 3 biến là: KC_DB, KC_DB_URL, KC_DB_USERNAME, KC_DB_PASSWORD. Giúp keycloak dùng mariadb là database để lưu trữ dữ liệu
  • Khai báo networks là keycloak-network để 2 container join vào và sử dụng chung mạng kết nối này

Chạy 2 container bằng docker compose

Chạy câu lệnh:

docker compose up

Mở docker desktop và xem thành quả

  • Hai container mariadb và keycloak đã chạy lên với đúng port được cấu hình ở file docker-compose.yml

image.png

Kết nối với database

  • Dùng các công cụ để kết nối với database với các thông tin về host, port, username và password mà chúng ta cấu hình
  • Chúng ta thấy database keycloak đã tạo sẵn ra rất nhiều bảng. Keycloak sẽ dùng những bảng này để lưu trữ dữ liệu để phục vụ quản lý đăng nhập, xác thực và phân quyền

image.png

Truy cập key cloak

  • Mở trình duyệt và truy cập vào localhost:8080 để truy cập keycloak
  • Đăng nhập keycloak bằng user, password mặc định. User: admin, pass: admin

image.png

Tạo realm mới

  • Vào Manage realm, chọn button Create Realm sẽ hiện popup để tạo Realm
  • Nhập Realm name. Chọn Create, để tạo Realm mới

image.png

Tạo User mới

  • Chọn User, sau đó chọn button create new user
  • Nhập Username, First Name và Last Name của user
  • Các tùy chọn khác mình sẽ giới thiệu ở một bài viết khác
  • Click Create để tạo User mới

image.png

Tạo user mới thành công

image.png

Xem user mới tạo trong bảng USER_ENTITY trong database

image.png

Ở các bài viết sau mình sẽ giới thiệu cách thêm password cho user và lấy token


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí