docker - 如何在分布式环境中将数据库连接参数传递给Keycloak

标签 docker keycloak

我正在使用在Docker容器中运行的Keycloak服务器。
我开发了一个用户存储提供程序以连接到客户端数据库,以搜索用户信息和登录验证。
我在代码中编写了数据库连接属性,但是现在是时候正确地做到这一点了,例如在启动时向Docker容器提供该信息并从代码中获取该信息。
我猜我的UserStorageProviderFactory的init(Config.Scope config)方法是查找这些参数的地方。那里的config参数包含来自文件standalone.xml的信息,但我需要在启动时将连接参数传递给Docker,以便可以轻松修改它们。
我怎么能这样呢?

最佳答案

您可以使用jboss-cli脚本将您的UserStorageProvider添加到standalone / -ha.xml,其属性可以由传递给容器的环境变量设置。
示例:
假设我们有一个spi.cli脚本,其中包含以下内容:

/subsystem=keycloak-server/spi=my-spi/provider=my-custom-auth-provider:add(enabled=true,properties={"my.custom.property", "${env.MY_ENV:myDefaultValue}"})
可以将其放在容器中的/opt/jboss/startup-scripts文件夹中,以在启动时自动运行,请参阅Keycloak docker documentation
运行时,它将独立生成以下内容:

<spi name="my-spi">
    <provider enabled="true" name="my-custom-auth-provider">
        <properties>
            <property name="my.custom.property" value="${env.MY_ENV:myDefaultValue}"/>
        </properties>
    </provider>
</spi>

然后可以使用init方法中的Config.Scope在代码中访问这些属性。
例如config.get("my.custom-property")
然后,它将检索传递到容器的值-e MY_ENV=test_value

关于docker - 如何在分布式环境中将数据库连接参数传递给Keycloak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63505402/

相关文章:

amazon-ec2 - 如何将我的自动缩放组连接到我的 ecs 集群?

c++ - 为什么 GDB 没有在断点处停止?

teamcity 和 docker 集成

keycloak - 根据身份提供者 token 中存在的数据更新 Keycloak 用户数据

docker ps 显示空列表 - 尽管 docker 告诉容器存在

docker:来自守护进程的错误响应:地址已在使用中

spring - Keycloak管理员客户端: Unable to find a MessageBodyReader of content-type application/json

java - Spring OAuth2 授权服务器替代方案

javascript - Angular JS 页面加载触发无限页面加载循环

spring-security - Keycloak 将我重定向到我的索引 url 而不是请求的那个