Wildfly Swarm:Keycloak 后端的环境特定配置

Wildfly Swarm: Environment specific configuration of Keycloak Backend

Given是wildfly上的一个JavaEE应用程序,使用keycloak作为身份验证后端,配置在project-stages.yml:

swarm:
  deployment:
    my.app.war:
      web:
        login-config:
          auth-method: KEYCLOAK

该应用程序将使用 Gitlab-CD-Pipeline 部署在不同的环境中。因此,必须根据环境配置 keycloak 细节。

到目前为止,我发现唯一有效的配置是添加一个 keycloak.json 类似(每个环境中的相同文件):

{
  "realm": "helsinki",
  "bearer-only": true,
  "auth-server-url": "http://localhost:8180/auth",
  "ssl-required": "external",
  "resource": "backend" 
}

根据 Wildfly-Swarm Documentation 应该可以在项目中配置 keycloak-stages.yml 如:

swarm:      
  keycloak:
    secure-deployments:
      my-deployment:
        realm: keycloakrealmname
        bearer-only: true
        ssl-required: external
        resource: keycloakresource
        auth-server-url: http://localhost:8180/auth

但是当我部署应用程序时,没有读取任何配置:

2018-03-08 06:29:03,540 DEBUG [org.keycloak.adapters.undertow.KeycloakServletExtension] (ServerService Thread Pool -- 12) KeycloakServletException initialization
2018-03-08 06:29:03,540 DEBUG [org.keycloak.adapters.undertow.KeycloakServletExtension] (ServerService Thread Pool -- 12) using /WEB-INF/keycloak.json
2018-03-08 06:29:03,542 WARN  [org.keycloak.adapters.undertow.KeycloakServletExtension] (ServerService Thread Pool -- 12) No adapter configuration.  Keycloak is unconfigured and will deny all requests.
2018-03-08 06:29:03,545 DEBUG [org.keycloak.adapters.undertow.KeycloakServletExtension] (ServerService Thread Pool -- 12) Keycloak is using a per-deployment configuration.

如果你看一下上面class的source,看起来唯一的解决办法就是提供一个KeycloakConfigResolver。 Wildfly-Swarm 是否提供读取项目的解析器-stages.yml?

如何配置特定于环境的 auth-server-urls?

解决方法是使用不同的 keycloak.json-Files,但我宁愿使用项目-stages.yml.

我有一个小型 WildFly Swarm 项目,它通过 project-defaults.yml 专门配置 Keycloak:https://github.com/Ladicek/swarm-test-suite/tree/master/wildfly/keycloak

从您 post 的片段中,唯一看起来不对的地方是:

swarm:      
  keycloak:
    secure-deployments:
      my-deployment:

my-deployment名称需要是部署的实际名称,与您在

中的名称相同
swarm:
  deployment:
    my.app.war:

如果您已经拥有它,那么恐怕我不得不开始猜测:您使用的是哪个 WildFly Swarm 版本?哪个 Keycloak 版本?

你也可以在你的 yml 中指定 swarm.keycloak.json.path 属性:
swarm: keycloak: json: path: path-to-keycloak-config-files-folder/keycloak-prod.json
您可以在应用程序启动期间使用 -Dswarm.project.stage 选项动态 select yml 文件配置。

更多参考资料: