1 基础知识
1.1 软件介绍
– Keycloak支持以最小代价为应用程序或安全服务提供身份验证,而程序无需处理存储用户或验证用户。
– Keycloak支持提供用户联合、强身份验证、用户管理、细粒度授权等。
1.2 软件特点
– 支持单点登录,即Single Sign-On,一次登录即可访问多个应用程序。
– 支持标准协议,支持OpenID Connect、OAuth 2.0和SAML 2.0。
– 支持集中管理,针对管理员和用户。
– 支持适配器,适配器支持开发者快速集成身份验证和授权机制,确保应用程序的安全性。
– 支持LDAP和Active Directory,兼容企业当前用户。
– 支持社交登录,可轻松启用社交登录,降低用户注册和登录的障碍
– 支持身份代理,即Identity Brokering,支持使用外部身份提供者进行身份验证。
– 支持高性能,系统轻量设置,能够快速响应请求,支持大规模用户同时访问
– 支持集群,通过集群架构,可确保系统高负载环境下仍然保持稳定和提供高可用性。
– 支持主题,允许企业根据平台要求调整用户界面的外观。
– 支持扩展,支持开发者通过编写代码扩展系统功能,以满足特点业务需求。
– 支持密码策略,管理员可根据安全需求定制密码策略,增强系统安全性。
2 最佳实践
2.1 系统环境
2.1.1 系统信息
OS = RHEL 9.x x86_64
HostName = any
IP Address = 10.168.0.54
2.1.2 更新系统并重启系统
dnf update -y reboot
2.1.3 安装OpenJDK
dnf install -y java-17-openjdk
安装完成后,你需要使用如下命令确认Java运行时可用,
java -version
可见如下输出,
openjdk version "17.0.12" 2024-07-16 LTS OpenJDK Runtime Environment (Red_Hat-17.0.12.0.7-1) (build 17.0.12+7-LTS) OpenJDK 64-Bit Server VM (Red_Hat-17.0.12.0.7-1) (build 17.0.12+7-LTS, mixed mode, sharing)
2.2 部署前的准备
2.2.1 安装所需的软件包
dnf install -y wget unzip vim
2.2.2 下载软件包
wget --no-check-certificate https://access.redhat.com/cspdownload/362ae22e0762b4c209ddc75d30cb602a/676bc482/rhbk-22.0.13/rhbk-22.0.13.zip
以上只是下载演示,如果不能下载请从如下连接下载,本章将下载“Red Hat build of Keycloak 22.0.13 Server”作为部署的软件包。
https://access.redhat.com/products/red-hat-build-of-keycloak
2.2.3 解压软件包
unzip rhbk-22.0.13.zip
2.3 部署应用
2.3.1 创建运行用户
groupadd -g 987 keycloak useradd -u 987 -g 987 -d /var/lib/keycloak -s /sbin/nologin keycloak
2.3.2 部署软件包
mkdir /opt/keycloak/ mv rhbk-22.0.13 mkdir /opt/keycloak/
2.3.3 设置环境变量
vim /etc/profile.d/rhbk.sh
输入如下配置,
export RHBK_HOME=/opt/keycloak/rhbk-22.0.13 export PATH=${RHBK_HOME}/bin:$PATH
另外,如果想快速配置,可使用如下命令,
echo 'export RHBK_HOME=/opt/keycloak/rhbk-22.0.13' > /etc/profile.d/rhbk.sh echo 'export PATH=${RHBK_HOME}/bin:$PATH' >> /etc/profile.d/rhbk.sh
配置完成后,可使用如下命令导入环境变量,
source /etc/profile
然后,你需要使用如下命令测试环境变量的声明,
kc.sh -V
可见如下输出,
Keycloak 22.0.13.redhat-00001 JVM: 17.0.12 (Red Hat, Inc. OpenJDK 64-Bit Server VM 17.0.12+7-LTS) OS: Linux 5.14.0-503.11.1.el9_5.x86_64 amd64
2.3.4 部署目录
ln -s /opt/keycloak/rhbk-22.0.13/conf /etc/keycloak chown keycloak:keycloak -R /opt/keycloak/rhbk-22.0.13/
2.4 配置应用
2.4.1 测试服务启动
sudo -u keycloak bash -c '/opt/keycloak/rhbk-22.0.13/bin/kc.sh start-dev'
可见如下显示,
Updating the configuration and installing your custom providers, if any. Please wait. 2024-12-25 22:21:48,966 INFO [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 5267ms 2024-12-25 22:21:50,225 INFO [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: , Hostname: , Strict HTTPS: false, Path: , Strict BackChannel: false, Admin URL: , Admin: , Port: -1, Proxied: false 2024-12-25 22:21:51,575 WARN [io.quarkus.agroal.runtime.DataSources] (main) Datasource enables XA but transaction recovery is not enabled. Please enable transaction recovery by setting quarkus.transaction-manager.enable-recovery=true, otherwise data may be lost if the application is terminated abruptly 2024-12-25 22:21:52,376 WARN [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled 2024-12-25 22:21:52,491 INFO [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller' 2024-12-25 22:21:52,946 INFO [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_1756, Site name: null 2024-12-25 22:21:55,668 INFO [org.keycloak.quarkus.runtime.storage.legacy.liquibase.QuarkusJpaUpdaterProvider] (main) Initializing database schema. Using changelog META-INF/jpa-changelog-master.xml UPDATE SUMMARY Run: 116 Previously run: 0 Filtered out: 0 ------------------------------- Total change sets: 116 2024-12-25 22:21:59,332 INFO [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener 2024-12-25 22:21:59,361 INFO [org.keycloak.services] (main) KC-SERVICES0050: Initializing master realm 2024-12-25 22:22:01,309 INFO [io.quarkus] (main) Keycloak 22.0.13.redhat-00001 on JVM (powered by Quarkus 3.2.12.Final-redhat-00001) started in 12.256s. Listening on: http://0.0.0.0:8080 2024-12-25 22:22:01,309 INFO [io.quarkus] (main) Profile dev activated. 2024-12-25 22:22:01,310 INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, jdbc-mariadb, jdbc-mssql, jdbc-mysql, jdbc-oracle, jdbc-postgresql, keycloak, micrometer, narayana-jta, reactive-routes, resteasy, resteasy-jackson, smallrye-context-propagation, smallrye-health, vertx] 2024-12-25 22:22:01,312 WARN [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.
你可以使用如下命令查看运行的进程,
pgrep -u keycloak java -a
可见如下输出,
1491 java -Dkc.config.built=true -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.err.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -XX:+ExitOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED -Dkc.home.dir=/opt/keycloak/rhbk-22.0.13/bin/.. -Djboss.server.config.dir=/opt/keycloak/rhbk-22.0.13/bin/../conf -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dquarkus-log-max-startup-records=10000 -cp /opt/keycloak/rhbk-22.0.13/bin/../lib/quarkus-run.jar io.quarkus.bootstrap.runner.QuarkusEntryPoint --profile=dev start-dev
你可以使用如下命令查看端口倾听,
ss -antp | grep $(pgrep -u keycloak java)
可见如下输出,
LISTEN 0 4096 *:8080 *:* users:(("java",pid=1491,fd=329)) LISTEN 0 50 *:46787 *:* users:(("java",pid=1491,fd=324)) LISTEN 0 50 [::ffff:127.0.0.1]:46635 *:* users:(("java",pid=1491,fd=328))
根据以上的端口需求,你需要执行如下命令开放端口,
firewall-cmd --permanent --add-port 8080/tcp firewall-cmd --reload firewall-cmd --list-all
然后,使用如下连接测试服务,
http://10.168.0.54:8080/
可见如下显示,
2.4.2 创建服务控制脚本
vim /etc/systemd/system/keycloak.service
加入如下配置,
[Unit] Description=Redhat build of Keycloak (RHBK) Requires=network.target After=syslog.target network.target [Service] Type=simple User=keycloak Group=keycloak WorkingDirectory=/opt/keycloak/rhbk-22.0.13 Environment="KEYCLOAK_ADMIN=admin" Environment="KEYCLOAK_ADMIN_PASSWORD=adminpwd" ExecStart=/usr/bin/bash -c '/opt/keycloak/rhbk-22.0.13/bin/kc.sh start-dev' Restart=on-failure StandardOutput=journal LimitNOFILE=102642 [Install] WantedBy=multi-user.target
配置创建后,你需要使用如下命令重载服务使配置生效,
systemctl daemon-reload
测试服务启动并设置自动运行,
systemctl start keycloak.service systemctl enable keycloak.service
如果遇到启动异常,请使用如下命令查看日志,
journalctl -u keycloak.service -b
2.4.3 测试登录
http://10.168.0.54:8080/
User: admin
Password: adminpwd
参阅文档
================
keycloak github
——————–
https://github.com/keycloak/keycloak
keycloak官方文档
——————-
https://www.keycloak.org/documentation.html
Red Hat的keycloak文档
—————-
https://docs.redhat.com/zh-cn/documentation/red_hat_build_of_keycloak/22.0/html/getting_started_guide/getting-started-zip-#getting-started-zip-before-you-start
https://docs.redhat.com/en/documentation/red_hat_build_of_keycloak/22.0/html/getting_started_guide/getting-started-zip-#getting-started-zip-before-you-start
没有评论