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

时间:2018-03-08 08:02:37

标签: devops keycloak wildfly-swarm

给定是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,应该可以在project-stages.yml中配置keycloak,如:

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.

如果您查看上述类的source,看起来唯一的方法是提供KeycloakConfigResolver。 Wildfly-Swarm是否提供了一个读取project-stages.yml?

的解析器

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

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

2 个答案:

答案 0 :(得分:0)

我有一个小型的WildFly Swarm项目,可以通过project-defaults.yml来完全配置Keycloak:https://github.com/Ladicek/swarm-test-suite/tree/master/wildfly/keycloak

从您发布的片段中,唯一看起来错误的是:

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

my-deployment名称必须是部署的实际名称,与

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

如果您已经拥有它,那么我担心我必须开始推测:您使用哪个WildFly Swarm版本?哪个Keycloak版本?

答案 1 :(得分:0)

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

进一步的参考: