Dùng Keycloak để login như thế nào?

First things first

Câu hỏi đầu tiên là tại sao dùng Keycloak?

Tôi đã hoàn thành việc cài đặt Weblate. Các thành viên trong team có thể vào weblate qua các account tôi tạo hoặc invite họ qua email. Tất nhiên điều này không có vấn đề gì khi số lượng user không lớn, tôi có thể tạo bằng tay hoặc nhập email của các bạn trong team rồi invite để họ vào, set password là có thể sử dụng.

Vấn đề chỉ xuất hiện khi số lượng người dùng trở nên nhiều hơn, và tôi thì lười invite bằng tay. Vậy có cách nào để một user có thể dùng tài khoản đang có để login vào Weblate? Xa hơn nữa thì bất kỳ ứng dụng nào cũng có thể login được bằng tài khoản công ty cấp mà không cần đăng ký mới lằng nhằng? Vấn đề này sẽ được giải quyết bằng KEYCLOAK – công nghệ hàng đầu thế giới cho việc quản lý user tập trung! 😉

Để tìm hiểu thêm về Keycloak thì mời bạn vào đây đọc thêm.

Let’s start!

Mục tiêu là sau khi thiết lập xong cấu hình thì chúng ta sẽ có thêm một nút login “sign in with: keycloak” như hình trên.

Sau khi click button keycloak thì chúng ta sẽ được tự động chuyển sang trang đăng nhập của keycloak

Sau khi nhập username/password và click Log In thì Keycloak tự động redirect về trang Weblate và bạn đã được đăng nhập thành công!

Làm sao Weblate có thể tích hợp với Keycloak? Thực tế Weblate hỗ trợ Keycloak thông qua một thư viện gọi là python-social-auth trong đó có bao gồm keycloak. Chúng ta chỉ cần thực hiện một số settings là có thể dùng được ngay keycloak.

Các bước cấu hình

  • Tạo một realm

Đầu tiên cần tạo một realm trong Admin console của keycloak. Realm là một không gian riêng biệt để quản lý các object (bao gồm user, client và các cấu hình liên quan). Weblate sẽ được authenticate trong realm này.

  • Tạo Client

Tiếp theo tạo Weblate client để tương tác với Keycloak. Ở đây chúng ta thực hiện theo hướng dẫn của thư viện python-social-auth

  1. Tạo Keycloak client trong Clients section.
  2. Cấu hình client như sau:
    Settings > Client ID => lấy làm giá trị của KEY trong setting
    Credentials > Client Authenticator > Secret => lấy làm giá trị của SECRET trong setting
  3. Cấu hình token:
    Settings > Access Type > confidential
    Settings > Fine Grain OpenID Connect Configuration > User Info Signed Response Algorithm > RS256
    Settings > Fine Grain OpenID Connect Configuration > Request Object Signature Algorithm > RS256
  4. Lấy public key :
    Realm Settings > Keys > Public key
  5. Cấu hình Client Mappers:
    Clients > Client ID > Mappers
    Bao gồm các giá trị trong hàm get_user_details: preferred_username, email, name, given_name, family_name. Có thể click vào “Add builtin” để thêm nhanh các userproperty này.
  • Cấu hình Weblate theo các settings của Keycloak

Cấu hình có thể như sau:

WEBLATE_SOCIAL_AUTH_KEYCLOAK_KEY: weblate
WEBLATE_SOCIAL_AUTH_KEYCLOAK_SECRET: 6d067698-6842-49b6-ac0c-2930df549051
WEBLATE_SOCIAL_AUTH_KEYCLOAK_PUBLIC_KEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8...
WEBLATE_SOCIAL_AUTH_KEYCLOAK_ALGORITHM: RS256
WEBLATE_SOCIAL_AUTH_KEYCLOAK_AUTHORIZATION_URL: http://localhost:8080/auth/realms/weblate/protocol/openid-connect/auth
WEBLATE_SOCIAL_AUTH_KEYCLOAK_ACCESS_TOKEN_URL: http://localhost:8080/auth/realms/weblate/protocol/openid-connect/token

Leave a comment