1.简介
KeyCloak是由Redhat支持的最流行的开源身份和访问管理平台之一。它以其灵活性和可扩展性而闻名,使其成为企业世界中的顶级候选人,那里有复杂的用户验证和授权用例。例如,多个应用程序必须支持单个登录名的多租户和n-Reseller级别。
1.1先决条件
需要以下知识。
- Keycloak
- Docker
- mysql
2. CT-Keycloak-am
ct-keycloak-am是我开发的一个项目,旨在在Docker容器中提供自定义的KeyCloak服务器。它包括一个默认领域,自定义主题,数据库连接(MySQL)和自定义SPI(必需的赞助)。
它包含CLI脚本,该脚本将下载KeyCloak服务器并安装MySQL数据源。
该项目可在https://github.com/czetsuya/ct-keycloak-iam。
上获得我们将使用的文件夹/文件。
keycloak-docker-emembly
- Docker
- Dockerfile-构建自定义KeyCloak容器
- docker-compose-dev.yml-构建并运行自定义KeyCloak容器和MySQL。
- src/main/资源
- 建造
- CLI/DATABASE/MYSQL
- set -database.cli-一组指令,以在keycloak配置中创建MySQL数据源和驱动程序的条目。请注意,它使用Docker-Compose文件中定义的环境变量。
- build-keycloak.sh
- 模块/数据库/mysql
- module.xml- KeyCloak所需的MySQL模块文件。确保该版本与Dockerfile中定义的版本匹配(而不是更改)
- 建造
3. Docker组成
我们将使用MySQL Docker映像来完成工作。
,我们将使用MySQL数据库,用户和权限。我们需要将MySQL连接设置定义为环境变量。
version: '3'
services:
keycloak-db:
image: mysql:8.0
ports:
- 33066:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: keycloak
command: mysqld --sql_mode=""
ct-keycloak-iam:
depends_on:
- keycloak-db
build:
context: ../
dockerfile: docker/Dockerfile
ports:
- 8888:8888
- 8080:8080
- 8443:8443
- 9990:9990
environment:
DB_ADDR: keycloak-db
DB_PORT: 3306
DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD: keycloak
DB_JDBC_PARAMS: useSSL=false&allowPublicKeyRetrieval=true
KEYCLOAK_IMPORT: /opt/jboss/keycloak_install_stage/realms/ct-realm-dev.json
KEYCLOAK_USER: keycloak.admin
KEYCLOAK_PASSWORD: keycloak.admin
KC_HOSTNAME_STRICT: false
DEBUG_PORT: 8888
PROXY_ADDRESS_FORWARDING: 'true'
确保CT-Keycloak-am Container中的DB_XXX参数值匹配mysql。
4.配置MySQL驱动程序和模块
这已经由build-keycloak.sh完成,该脚本将mysql驱动程序和模块文件复制到docker容器内的提取的keycloak服务器。
这是我们的MySQL模块文件。
<?xml version="1.0" encoding="UTF-8"?>
<module
xmlns="urn:jboss:module:1.0" name="com.mysql.jdbc">
<resources>
<resource-root path="mysql-connector-java-8.0.29.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
5.在KeyCloak中添加MySQL数据源和驱动程序配置
这是由set-database.cli脚本来处理的,该脚本通过使用来自数据库URL,用户名,密码和JDBC参数等环境变量的值来安装数据源和驱动程序配置。
/subsystem=datasources/data-source=KeycloakDS: remove()
/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:mysql://${env.DB_ADDR:mysql}:${env.DB_PORT:3306}/${env.DB_DATABASE:keycloak}${env.DB_JDBC_PARAMS:}, driver-name=mysql)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak})
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password})
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1")
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections)
/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql, driver-module-name=com.mysql.jdbc,driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource)
6.运行项目
如果您熟悉Docker-Compose,您知道这是我们的定制KeyCloak服务器的入口点。
在运行它之前,请评论导入SPI的行,或成为GitHub的赞助商,以便您可以访问那些受限制的项目。
docker-compose -f ./keycloak-docker-assembly/docker/docker-compose-dev.yml up --build