消息:意外元素“{urn:jboss:domain:keycloak:1.1}subsystem”

问题描述

我正在尝试在我的应用中使用 keycloak。我在 docker 上运行 keycloak 并使用 wildfly 20 作为应用程序服务器。我用这个 scrypt 来启动 keycloak。

version: '3'

services:
  keycloak:
      image: quay.io/keycloak/keycloak:10.0.1
      container_name: keycloak
      environment:
        DB_vendOR: postgres
        DB_ADDR: host.docker.internal
        DB_USER: keycloak
        DB_PASSWORD: test
        KEYCLOAK_USER: admin
        KEYCLOAK_PASSWORD: test
      ports:
        - 8079:8080
        - 8443:8443

然后我将此代码添加到我的 standalone.xml

<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
       <secure-deployment name="pato-ejb.war">
          <realm>pato</realm>
          <auth-server-url>http://localhost:8079/auth</auth-server-url>
          <ssl-required>external</ssl-required>
          <resource>pato</resource>
          <credential name="secret">password</credential>
       </secure-deployment>
    </subsystem>

和我的 web.xml 的安全设置

<security-constraint>
        <web-resource-collection>
            <web-resource-name></web-resource-name>
            <description>Protects all resources</description>
            <url-pattern>*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    <login-config>
        <auth-method>KEYCLOAK</auth-method>
        <realm-name>pato</realm-name>
    </login-config>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>user/</web-resource-name>
            <url-pattern>/user/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>user</role-name>
        </auth-constraint>
    </security-constraint>
    <security-role>
        <role-name>user</role-name>
    </security-role>

最后我给 jboss 添加了 keycloak jars folder with jars

当我启动 standalone.bat 时,我立即收到此错误

11:41:14,220 ERROR [org.jboss.as.controller] (Controller Boot Thread)

OPVDX001: Validation error in standalone.xml -----------------------------------
|
|  521: </subsystem>
|  522: <subsystem xmlns="urn:jboss:domain:weld:4.0"/>
|  523: <subsystem xmlns="urn:jboss:domain:keycloak:1.1">
|       ^^^^ Unexpected element '{urn:jboss:domain:keycloak:1.1}subsystem'
|
|  524:    <secure-deployment name="pato-ejb.war">
|  525:       <realm>pato</realm>
|  526:       <auth-server-url>http://localhost:8079/auth</auth-server-url>
|
| The primary underlying error message was:
| > ParseError at [row,col]:[523,9]
| > Message: Unexpected element '{urn:jboss:domain:keycloak:1.1}subsystem'
|
|-------------------------------------------------------------------------------

11:41:14,223 ERROR [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0055: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: WFLYCTL0085: Failed to parse configuration
        at org.jboss.as.controller@12.0.1.Final//org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:143)
        at org.jboss.as.server@12.0.1.Final//org.jboss.as.server.ServerService.boot(ServerService.java:395)
        at org.jboss.as.controller@12.0.1.Final//org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:416)
        at java.base/java.lang.Thread.run(Thread.java:834)

11:41:14,227 FATAL [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0056: Server boot has Failed in an unrecoverable manner; exiting. See prevIoUs messages for details.

解决方法

Keycloak Downloads 中,您会看到“客户端适配器”部分。这是您解压到 Wildfly 目录中的 .zip 或 .tar.gz 文件。虽然您拥有所需的 .jar 文件,但您缺少所有 module.xml 文件。打开当前版本,你会看到你需要的文件。此外,还有一些安装文件会更改您的 standalone.xml 以启用 Keycloak。当前层次结构类似于:

.
├── bin
│   ├── adapter-elytron-install.cli
│   ├── adapter-elytron-install-offline.cli
│   ├── adapter-install.cli
│   └── adapter-install-offline.cli
├── docs
│   └── licenses-keycloak
│       ├── licenses.css
│       ├── licenses.html
│       ├── licenses.xml
│       ├── licenses.xsl
│       ├── org.keycloak,keycloak-adapter-core,12.0.1,Apache Software License 2.0.txt
│       ├── org.keycloak,keycloak-adapter-spi,keycloak-authz-client,keycloak-common,keycloak-core,keycloak-jboss-adapter-core,keycloak-undertow-adapter,keycloak-undertow-adapter-spi,keycloak-wildfly-adapter,keycloak-wildfly-elytron-oidc-adapter,Apache Software License 2.0.txt
│       └── org.keycloak,keycloak-wildfly-subsystem,Apache Software License 2.0.txt
└── modules
    └── system
        └── add-ons
            └── keycloak
                └── org
                    └── keycloak
                        ├── keycloak-adapter-core
                        │   └── main
                        │       ├── keycloak-adapter-core-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-adapter-spi
                        │   └── main
                        │       ├── keycloak-adapter-spi-12.0.1.jar
                        │       ├── keycloak-undertow-adapter-spi-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-adapter-subsystem
                        │   └── main
                        │       └── module.xml
                        ├── keycloak-authz-client
                        │   └── main
                        │       ├── keycloak-authz-client-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-common
                        │   └── main
                        │       ├── keycloak-common-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-core
                        │   └── main
                        │       ├── keycloak-core-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-jboss-adapter-core
                        │   └── main
                        │       ├── keycloak-jboss-adapter-core-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-undertow-adapter
                        │   └── main
                        │       ├── keycloak-undertow-adapter-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-wildfly-adapter
                        │   └── main
                        │       ├── keycloak-wildfly-adapter-12.0.1.jar
                        │       └── module.xml
                        ├── keycloak-wildfly-elytron-oidc-adapter
                        │   └── main
                        │       ├── keycloak-wildfly-elytron-oidc-adapter-12.0.1.jar
                        │       └── module.xml
                        └── keycloak-wildfly-subsystem
                            └── main
                                ├── keycloak-wildfly-subsystem-12.0.1.jar
                                └── module.xml

我鼓励您在 Docker 之外的本地环境中安装 Keycloak,以了解这一切是如何组合在一起的。 These steps 会引导您完成整个过程,但基本上您将文件解压缩到 Wildfly 主目录并在 bin 目录中运行相应的脚本。