Add new client in Keycloak

Thêm mới client trong Keycloak

  • Client trong Keycloak là những ứng dụng sẽ tương tác với nó để authentication và authorization.
  • Việc thêm mới client trong Keycloak là để nó quản lý tất cả những client sẽ connect tới nó, theo giao thức, chuẩn authentication và authorization nào.

  • Đầu tiên đăng nhập vào realm mà các bạn muốn thêm mới client

_config.yml

  • Nhấn vào menu item Client

_config.yml

_config.yml

  • Để thêm mới một client, các bạn hãy nhấn vào nút Create client trong trang này. Một trang Create Client General Settings sẽ hiển thị như sau:

_config.yml

Các bạn hãy điền thông tin client sử dụng các field Client type, Client ID, Name và Description.

Ở field Client type, chúng ta có 2 type mà Keycloak hỗ trợ là OpenID Connect (một extension của chuẩn OAuth) và SAML (Security Assertion Markup Language), tuỳ theo mục đích của mình mà các bạn chọn cho hợp lý nhé!

  • Giả sử bây giờ mình có một ứng dụng Angular tên là angular-test, mình muốn sử dụng Keycloak để quản lý việc authentication và authorization theo chuẩn OAuth2. Cho Angular application, chúng ta sẽ sử dụng grant type Authorization Code với PKCE của OAuth2.

Để khai báo client cho ứng dụng Angular này vào Keycloak, mình sẽ điền thông tin của nó như sau:

_config.yml

  • Tuỳ theo type mà các bạn sử dụng cho ứng dụng của mình, chúng ta có thể cần phải khai báo thêm những thông tin cần thiết liên quan đến type đó
  • Đối với type OpenID Connect, chúng ta sẽ cần khai báo thêm thông tin, sử dụng nút Next

  • Nhấn nút Next, các bạn sẽ thấy Keycloak hiển thị trang Capability config như sau:

_config.yml

  • Mặc định thì đối với type OpenID Connect, Keycloak sẽ tạo mới một client hỗ trợ Authorization Code và Resource Owner Password Credentials grant type của OAuth2 nên các bạn thấy field Standard flow và Direct access grants được chọn.

  • Keycloak còn hỗ trợ Implicit Flow (field Implicit flow),
    Client Credentials (field Service accounts roles) và Device Authorization (field OAuth 2.0 Device Authorization Grant) của OAuth 2, CIBA flow (field OIDC CIBA Grant) một chuẩn extend OpenID Connect.

  • Mình sẽ không sử dụng Resource Owner Password Credentials grant type cho Angular application của mình nên mình sẽ bỏ chọn grant type này đi!

  • Ở đây, các bạn còn có thể thấy 2 field Client authenticationAuthorization đang được turn off. Client authentication field liên quan đến access type của client, mặc định “off” có nghĩa là access type là public, “on” là confidential nha các bạn! Liên quan đến access type của client các bạn có thể đọc thêm ở đây.

  • Authorization field thì liên quan đến việc hỗ trợ authorization, định nghĩa scope, authorization policies, cho client của chúng ta!

  • Cho Angular application, access type nên là public và không hỗ trợ Authorization nên mình sẽ không turn on 2 field này các bạn nhé!

  • Chúng ta có thể enable hay disable client này bằng field Enabled và có rất nhiều field mà chúng ta có thể cấu hình cho thông tin của một client.

  • Cho Angular application, trong phần Login settings, các bạn nên cấu hình field Valid redirect URIs. Ở local, giá trị của field này có thể là: http://localhost:4200/* như sau:

_config.yml

  • Chúng ta cũng có thể thay đổi theme cho trang login của user bằng field Login Theme trong phần Login Settings.

  • Trong tab Advanced, phần Advanced Settings, các bạn có thể cấu hình Code Exchange method của grant type Authorization Code với PKCE nếu muốn

_config.yml

  • Mặc định nếu chúng ta không cấu hình cho field này thì Keycloak sẽ không apply PKCE cho client này, trừ khi client gửi code exchange và code challenge method.

  • Sau khi cấu hình xong thông tin cho Client thì các bạn hãy click nút Save để lưu lại những cấu hình đó nhé!

  • Trong bài viết này, mình chỉ đề cập những thông tin cấu hình cơ bản của một Client được tạo trong Keycloak sử dụng grant type Authorization Code với PKCE. Tuỳ theo grant type mà client hỗ trợ thì còn nhiều thông tin, cấu hình khác nữa. Tuỳ nhu cầu, các bạn hãy tìm hiểu thêm nhé!

Written on May 31, 2024