Keycloak là gì?
Keycloak là một giải pháp mã nguồn mở cho việc quản lý xác thực và ủy quyền trong ứng dụng. Nó cung cấp các tính năng bảo mật như đăng nhập đơn giản, quản lý người dùng, quản lý quyền truy cập và quản lý phiên.
Với Keycloak, bạn có thể xây dựng một hệ thống xác thực và ủy quyền phức tạp mà không cần phải triển khai từ đầu. Keycloak hỗ trợ các tiêu chuẩn mở như OpenID Connect, OAuth 2.0 và SAML, giúp tích hợp với nhiều ứng dụng khác nhau và cung cấp khả năng đăng nhập đơn giản cho người dùng.
Các tính năng chính của Keycloak bao gồm:
- Quản lý người dùng và nhóm người dùng
- Xác thực đa yếu tố và xác thực email
- Quản lý ủy quyền và phân quyền truy cập
- Quản lý khách hàng ứng dụng và các tài khoản liên kết
- Cung cấp các tiêu chuẩn xác thực như OpenID Connect và OAuth 2.0
- Hỗ trợ SSO (Single Sign-On) cho nhiều ứng dụng
Keycloak cung cấp giao diện quản lý người dùng dễ sử dụng và mạnh mẽ, cho phép bạn quản lý người dùng, nhóm người dùng, quyền truy cập và nhiều hơn nữa thông qua giao diện người dùng hoặc API.
Với tích hợp Keycloak vào ứng dụng của bạn, bạn có thể xây dựng một hệ thống xác thực và ủy quyền mạnh mẽ, cung cấp tính năng đăng nhập an toàn và quản lý người dùng hiệu quả.
Điều quan trọng là nắm vững các khái niệm và cấu trúc dữ liệu của Keycloak để sử dụng nó một cách hiệu quả trong ứng dụng của bạn. Bạn cũng có thể tìm hiểu thêm thông tin về Keycloak tại trang web chính thức của dự án: https://www.keycloak.org/.
Tại sao chúng ta phải sửu dụng Keycloak
- Bảo mật mạnh mẽ: Keycloak cung cấp các tính năng bảo mật như xác thực đa yếu tố, quản lý người dùng, quản lý quyền truy cập và quản lý phiên. Với việc sử dụng các tiêu chuẩn mở như OpenID Connect và OAuth 2.0, Keycloak đảm bảo rằng ứng dụng của bạn tuân thủ các phương pháp xác thực và ủy quyền tiên tiến.
- Tiết kiệm thời gian và công sức: Keycloak cung cấp một giao diện quản lý người dùng và quyền truy cập dễ sử dụng, giúp bạn tiết kiệm thời gian và công sức trong việc xây dựng hệ thống xác thực và ủy quyền từ đầu. Bạn có thể sử dụng giao diện người dùng hoặc API của Keycloak để quản lý người dùng, quyền truy cập và các khía cạnh bảo mật khác.
- Tích hợp dễ dàng: Keycloak hỗ trợ nhiều tiêu chuẩn xác thực và ủy quyền phổ biến như OpenID Connect, OAuth 2.0 và SAML. Điều này cho phép bạn dễ dàng tích hợp Keycloak vào các ứng dụng của bạn, bất kể nền tảng và ngôn ngữ lập trình bạn đang sử dụng.
- Single Sign-On (SSO): Keycloak cung cấp khả năng Single Sign-On, cho phép người dùng đăng nhập một lần và truy cập vào nhiều ứng dụng khác nhau mà không cần phải đăng nhập lại. Điều này cải thiện trải nghiệm người dùng và giảm khả năng mắc lỗi đăng nhập nhiều lần.
- Linh hoạt và mở rộng: Keycloak là một giải pháp mã nguồn mở và cung cấp khả năng linh hoạt và mở rộng. Bạn có thể tùy chỉnh và mở rộng Keycloak theo nhu cầu của ứng dụng của bạn. Ngoài ra, Keycloak còn hỗ trợ các tính năng như JWT (JSON Web Tokens), Web SSO, ngôn ngữ đa ngữ và nhiều hơn nữa.
Cấu hình yêu cầu
- Hệ điều hành Ubuntu 23.04
- Có quyền sudo
- Ít nhất 2 GB RAM với thêm 50 G dung lượng ổ đĩa SSD. Xin lưu ý rằng đây là yêu cầu tối thiểu đối với môi trường demo. Cấu hình phần cứng thực tế sẽ thay đổi theo khối lượng dữ liệu.
- Cài đặt PostgreSQL 15, nếu bạn chưa cài, bạn có thể tham khảo tại đây
- Cài đặt Java 17
Ở đâu cấu hình của mình dùng là 16G RAM và 8 core CPU
Cài đặt Keycloak
Bước 1: Tạo database keycloak
Bước 2: Cài đặt và khởi động máy chủ Keycloak
Chúng ta tải tiệp trên trang chủ của keycloak https://www.keycloak.org/downloads, ở đây mình sẽ tải bản Zip
sudo apt install curl -y && curl -LO https://github.com/keycloak/keycloak/releases/download/21.1.2/keycloak-21.1.2.zip
sau đó chúng ta giải nén tiệp Zip bằng lệnh
unzip keycloak-21.1.2.zip
khi giải nén thành công ta vào thư mục vừa giải nén
cd keycloak-21.1.2
Thư mục này chứa ứng dụng Keycloak Quarkus.
Khi chúng ta khởi động máy chủ lần đầu tiên, chúng ta phải đặt người dùng quản trị viên và mật khẩu quản trị viên:
KEYCLOAK_ADMIN=admin KEYCLOAK_ADMIN_PASSWORD=admin ./bin/kc.sh start-dev
nếu báo lỗi ./bin/kc.sh: line 124: java: command not found
thì chúng ta cần cài đặt Java
sudo apt-get install openjdk-17-jre
sau khi cài đặt thành cần kiểm tra đã cài đặt java 17 chưa
java --version
sau đó ta sử dụng lại lệnh start-dev
KEYCLOAK_ADMIN=admin KEYCLOAK_ADMIN_PASSWORD=admin ./bin/kc.sh start-dev
sau khi start-dev thành công ta vào IP của máy chủ và port 8080
Tiếp tục nhập password vs mật khẩu là admin
Như vậy chúng ta đã start dev thành công
Bước 3: Cấu hình kết nối keycloak với PostgresSQL
Vào thư mục conf của Keycloak Server.
thay đổi cấu hình theo hình và thông tin,cập nhật các thuộc tính sau trong tệp conf/keycloak.conf:
# The database vendor.
db=postgres # The username of the database user.
db-username=postgres # The password of the database user.
db-password=PassKhongChilaPasss # The full database JDBC URL. If not provided, a default URL is set based on the selected database vendor.
db-url=jdbc:postgresql://localhost/keycloak
Tiếp tục chạy lện start
./bin/kc.sh start-dev
Như vậy chúng ta đã cấu hình thành công kết nối Keycloak với PostgresSQL
Bước 4: Tạo Người dùng và Nhóm cho Keycloak
Chúng ta không nên chạy Keycloak dưới quyền root vì lý do bảo mật. Hãy tạo một keycloak nhóm và thêm một keycloak người dùng vào đó.
Ngoài ra, thư mục chính của người dùng keycloak sẽ là thư mục cài đặt của Keycloak, tức là /opt/keycloak.
sudo groupadd keycloak
sudo useradd -r -g keycloak -d /opt/keycloak -s /sbin/nologin keycloak
Bước 5: Cấu hình tự động start khi khởi động (systemd)
Copy keycloak vào thư mục etc
sudo mkdir /etc/keycloak sudo cp -r ./keycloak-21.1.2/* /etc/keycloak
Thay đổi quyền và quyền sở hữu thư mục cài đặt Keycloak,chúng ta sẽ sửa đổi quyền sở hữu và quyền của thư mục /etc/keycloak. Chúng ta cũng sẽ cấp quyền thực thi cho thư mục /etc/keycloak/bin/. tiếp theo đó, hãy chạy các lệnh sau:
sudo chown -R keycloak:keycloak /etc/keycloak/
sudo chmod o+x /opt/keycloak/bin/
Tiếp tục ta tạo tiệp keycloak.service trong systemd
sudo nano /etc/systemd/system/keycloak.service
Thực hiện các thay đổi được đánh dấu là in đậm hoặc bạn chỉ cần sao chép/dán nội dung bên dưới.
[Unit]
Description=The Keycloak Server
After=syslog.target network.target
Before=httpd.service
[Service]
EnvironmentFile=/etc/keycloak/conf/keycloak.conf
User=keycloak
Group=keycloak
LimitNOFILE=102642
PIDFile=/etc/keycloak/keycloak.pid
ExecStart=/etc/keycloak/bin/kc.sh start-dev
StandardOutput=null
[Install]
WantedBy=multi-user.target
Tải lại cấu hình trình quản lý systemd và bật dịch vụ keycloak khi khởi động hệ thống
sudo systemctl daemon-reload
sudo systemctl enable keycloak
Để bắt đầu dịch vụ hệ thống keycloak:
sudo systemctl start keycloak
Khi dịch vụ được bắt đầu, chúng ta có thể kiểm tra trạng thái bằng cách chạy lệnh bên dưới:
sudo systemctl status keycloak
Nếu dịch vụ bắt đầu thành công, chúng ta sẽ thấy một cái gì đó như dưới đây:
Trạng thái Hoạt động, như được đánh dấu, ở trên xác minh rằng dịch vụ đang hoạt động.