Keycloak
Keycloak 是一个用 Java 实现的身份管理解决方案,可以用作许多不同应用程序的身份验证后端。
安装
安装 keycloak 软件包。
运行
启动/启用 keycloak.service
。在默认配置中,它将以单机模式启动,不建议在生产环境中使用,但为了简单起见,本文将使用此模式。
默认情况下,Keycloak 可通过 http://127.0.0.1:8080/ 和 https://127.0.0.1:8443/ 访问。
创建管理员用户
根据 上游说明,您有两种方法创建初始 Keycloak 管理员用户:一种是通过 https://127.0.0.1:8080 连接到 Keycloak,另一种是在首次启动时添加用户名和密码环境变量。
要执行后者,覆盖 unit
/etc/systemd/system/keycloak.service.d/admin.conf
[Service] Environment="KEYCLOAK_ADMIN=admin" Environment="KEYCLOAK_ADMIN_PASSWORD=securepassword"
重新加载 systemd 守护进程,然后重启 keycloak.service
。
之后,请务必删除覆盖并再次 重新加载守护进程,因为当帐户已存在时,Keycloak 将拒绝使用已定义的环境变量启动。
配置
默认的单机配置可以在 /etc/keycloak/standalone.xml
中找到。
在服务器运行时对此文件所做的任何更改都不会生效,甚至可能被服务器覆盖。请事先停止服务,使用命令行脚本或使用 WildFly 的 Web 控制台。
服务使用的端口可以在该文件中找到,尽管格式略有不寻常
/etc/keycloak/standalone.xml
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <socket-binding name="http" port="${jboss.http.port:8080}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> </socket-binding-group>
H2 配置
Keycloak 的 standalone.xml
文件预配置了两个 h2 数据源。一个是 “ExampleDS”,可以安全地移除。另一个是 “KeycloakDS”,用于存储 Keycloak 的配置。(jboss.home.dir
在 Keycloak 包中指的是 /opt/keycloak
)
H2 文件数据库的示例配置部分
/etc/keycloak/standalone.xml
<subsystem xmlns="urn:jboss:domain:datasources:5.0"> <datasources> <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> ... <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/KeycloakDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
PostgreSQL 配置
官方 Arch Linux Keycloak 软件包已经内置了 PostgreSQL 支持。
PostgreSQL 的示例配置部分
/etc/keycloak/standalone.xml
<subsystem xmlns="urn:jboss:domain:datasources:5.0"> <datasources> <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:postgresql://127.0.0.1:5432/keycloak</connection-url> <driver>postgresql</driver> <security> <user-name>keycloak</user-name> <password>keycloak</password> </security> </datasource> <drivers> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> ... <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/KeycloakDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
Keycloak Prometheus 指标
安装 keycloak-metrics-spi 软件包。要启用指标监听器端点
/opt/keycloak/bin/kcadm.sh config credentials --server https://127.0.0.1:8080/auth --realm master --user $KEYCLOAK_ADMIN --password $KEYCLOAK_PASS /opt/keycloak/bin/kcadm.sh update events/config -s "eventsEnabled=true" -s "adminEventsEnabled=true" -s "eventsListeners+=metrics-listener"
config 命令会在运行该命令的用户的 .keycloak 目录中创建一个 kcadm.config 文件。由于包含访问令牌,建议之后删除该文件
rm /home/$USER/.keycloak/kcadm.config
重启后,指标可通过 https://127.0.0.1:8080/auth/realms/master/metrics 访问