在WildFly的Keycloak子系统中参数化安全部署名称

时间:2019-06-17 13:46:55

标签: jboss wildfly keycloak

我正在寻找一种参数化KeyCloak子系统(WildFly适配器属性)的方法,以允许外部输入安全部署名称属性。

除WAR名称外,我正在将应用程序部署到具有完全相同配置的多个环境中,因此我想将所有内容都配置为输入参数,无论是来自standalone.xml的系统属性还是环境变量。但是,使用上述子系统无法达到结果。我已经尝试设置系统属性,环境变量。以下是子系统的当前示例配置,

    some_war_name.war 

被硬编码

        <secure-deployment name="some_war_name.war">
            <realm>${keycloak.realm}</realm>
            <resource>${keycloak.client.id}</resource>
            <auth-server-url>${keycloak.server.url}</auth-server-url>
            <ssl-required>external</ssl-required>
            <credential name="secret">${keycloak.credential.secret}</credential>
        </secure-

不幸的是,我无法以任何方式参数化安全部署名称。甚至可以实现吗?

2 个答案:

答案 0 :(得分:0)

不幸的是,我没有答案,但是在这里使用Wildfly 16.0完全相同的问题(docker镜像)。

提供时:

    <subsystem xmlns="urn:jboss:domain:keycloak:1.1">
        <secure-deployment name="my.very.special.war.file.war">
            <realm>${env.keycloak.realm}</realm>
            <auth-server-url>${env.keycloak.auth-server-url}</auth-server-url>
            <ssl-required>${env.keycloak.ssl-required}</ssl-required>
            <resource>${env.keycloak.resource}</resource>
            <credential name="secret">${env.keycloak.credentials.secret}</credential>
            <principal-attribute>preferred_username</principal-attribute>
            <use-resource-role-mappings>${env.keycloak.use-resource-role-mappings}</use-resource-role-mappings>
        </secure-deployment>
    </subsystem>

一切正常。但是当做

    <subsystem xmlns="urn:jboss:domain:keycloak:1.1">
        <secure-deployment name="${env.keycloak.deployment.name}">
            <realm>${env.keycloak.realm}</realm>
            <auth-server-url>${env.keycloak.auth-server-url}</auth-server-url>
            <ssl-required>${env.keycloak.ssl-required}</ssl-required>
            <resource>${env.keycloak.resource}</resource>
            <credential name="secret">${env.keycloak.credentials.secret}</credential>
            <principal-attribute>preferred_username</principal-attribute>
            <use-resource-role-mappings>${env.keycloak.use-resource-role-mappings}</use-resource-role-mappings>
        </secure-deployment>
    </subsystem>

我收到以下警告日志:

[org.keycloak.adapters.undertow.KeycloakServletExtension] (ServerService线程池-54)没有适配器配置。钥匙斗篷 未配置,将拒绝所有请求。

环境变量可用并且其中没有错字 干杯

答案 1 :(得分:0)

对安全部署名称进行参数设置不适用于子系统。

您可以通过在WAR的keycloak.json目录中创建WEB-INF适配器配置文件来解决该问题,如文档中所述: https://www.keycloak.org/docs/latest/securing_apps/#required-per-war-configuration

例如:

{
  "realm": "${env.keycloak.realm}",
  "auth-server-url": "${env.keycloak.auth-server-url}",
  "ssl-required": "${env.keycloak.ssl-required}",
  "resource": "${env.keycloak.resource}",
}