Keycloak
Keycloak 是一个用 Java 实现的身份管理解决方案,可以用作许多不同应用程序的身份验证后端。
安装
安装 keycloak 软件包。
运行
启动/启用 keycloak.service。在默认配置中,它将以单机模式启动,不建议在生产环境中使用,但为了简单起见,本文将使用此模式。
默认情况下,Keycloak 可通过 http://127.0.0.1:8080/ 和 https://127.0.0.1:8443/ 访问。
创建管理员用户
根据 上游说明,您有两种方法创建初始 Keycloak 管理员用户:一种是通过 https://: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://: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://: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://:8080/auth/realms/master/metrics 访问