8.16. 使用红帽单点登录保护您的 JBoss EAP 可引导 JAR 应用


您可以使用 Galleon keycloak-client-oidc 层安装使用 Red Hat Single Sign-On 7.5 OpenID Connect 客户端适配器置备的服务器版本。

注意

使用 keycloak-client-oidc 层已在 JBoss EAP XP 4 中弃用。使用 elytron-oidc-client 层,它提供原生 OpenID Connect (OIDC)客户端。如需更多信息,请参阅使用 OpenID Connect 开发 JBoss EAP bootable jar 应用

keycloak-client-oidc 层向 Maven 项目提供 Red Hat Single Sign-On OpenID Connect 客户端适配器。此层包含在 keycloak-adapter-galleon-pack Red Hat Single Sign-On 功能 pack 中。

您可以将 keycloak-adapter-galleon-pack 功能 pack 添加到 JBoss EAP Maven 插件配置中,然后添加 keycloak-client-oidc。您可以通过访问 支持的配置: Red Hat Single Sign-On 7.4 网页来查看与 JBoss EAP 兼容的 Red Hat Single Sign-On 客户端适配器。

此流程中的示例演示了如何使用 keycloak-client-oidc 层提供的 JBoss EAP 功能来保护 JBoss EAP 的可引导 JAR。

先决条件

  • 您已检查了最新的 Maven 插件版本,如 MAVEN_PLUGIN_VERSION.X.GA.Final-redhat-00001,其中 MAVEN_PLUGIN_VERSION 是主版本,X 是 microversion。请参阅 /ga/org/wildfly/plugins/wildfly-jar-maven-plugin 的索引
  • 您已检查了最新的 Galleon 功能软件包版本,如 4.0.X.GA-redhat-BUILD_NUMBER,其中 X 是 JBoss EAP XP 的微版本,BUILD_NUMBER 是 Galleon 功能软件包的构建号。XBUILD_NUMBER 可以在 JBoss EAP XP 4.0.0 产品生命周期中演进。请参阅 /ga/org/jboss/eap/wildfly-galleon-pack 的索引
  • 您已检查了最新的 Red Hat Single Sign-On Galleon 功能软件包版本,如 org.keycloak:keycloak-adapter-galleon-pack:15.0.X.redhat-BUILD_NUMBER,其中 X 是 Red Hat Single Sign-On 的微版本,它依赖于 Red Hat Single Sign-On 服务器版本来保护应用程序,BUILD_NUMBER 是 Red Hat Single Sign-On Galleon 功能的构建号。XBUILD_NUMBER 可以在 JBoss EAP XP 4.0.0 产品生命周期中演进。请参阅 /ga/org/keycloak/keycloak-adapter-galleon-pack 的索引
  • 您已创建了 Maven 项目,设置父依赖项并添加依赖项,以创建您希望使用 Red Hat Single Sign-On 保护的应用程序。请参阅 创建可引导 JAR Maven 项目
  • 您有一个在端口 8090 上运行的 Red Hat Single Sign-On 服务器。请参阅 启动 Red Hat Single Sign-On 服务器。
  • 您已登录到 Red Hat Single Sign-On Admin 控制台并创建以下元数据:

    • 名为 demo 的域。
    • 名为 Users 的角色。
    • 用户和密码。您必须为用户分配 Users 角色。
    • 具有根 URL 的公共客户端 Web 应用。该流程中的示例,将 simple-webapp 定义为 Web 应用程序 ,http://localhost:8080/simple-webapp/secured 作为根 URL。

      重要

      在设置 Maven 项目时,您必须在 Maven archetype 中使用 Red Hat Single Sign-On 保护的应用程序指定值。例如:

      $ mvn archetype:generate \
      -DgroupId=com.example.keycloak \
      -DartifactId=simple-webapp \
      -DarchetypeGroupId=org.apache.maven.archetypes \
      -DarchetypeArtifactId=maven-archetype-webapp \
      -DinteractiveMode=false
      cd simple-webapp
      Copy to Clipboard Toggle word wrap
      注意

      流程中显示的示例指定以下属性:

      • ${bootable.jar.maven.plugin.version} 用于 Maven 插件版本。
      • ${jboss.xp.galleon.feature.pack.version} 用于 Galleon 功能软件包版本。
      • ${Keycloak.feature.pack.version} 用于 Red Hat Single Sign-On feature pack 版本。

      您必须在项目中设置这些属性。例如:

      <properties>
          <bootable.jar.maven.plugin.version>6.1.2.Final-redhat-00001</bootable.jar.maven.plugin.version>
          <jboss.xp.galleon.feature.pack.version>4.0.0.GA-redhat-00002</jboss.xp.galleon.feature.pack.version>
          <keycloak.feature.pack.version>15.0.4.redhat-00001</keycloak.feature.pack.version>
      </properties>
      Copy to Clipboard Toggle word wrap

流程

  1. pom.xml 文件的 <build > 元素中添加以下内容。您必须指定任何 Maven 插件的最新版本,以及 org.jboss.eap:wildfly-galleon-pack Galleon 功能软件包的最新版本。例如:

    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-jar-maven-plugin</artifactId>
            <version>${bootable.jar.maven.plugin.version}</version>
            <configuration>
                <feature-packs>
                    <feature-pack>
                        <location>org.jboss.eap:wildfly-galleon-pack:${jboss.xp.galleon.feature.pack.version}</location>
                    </feature-pack>
                    <feature-pack>
                        <location>org.keycloak:keycloak-adapter-galleon-pack:${keycloak.feature.pack.version}</location>
                    </feature-pack>
                </feature-packs>
                <layers>
                    <layer>datasources-web-server</layer>
                    <layer>keycloak-client-oidc</layer>
                </layers>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>package</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    Copy to Clipboard Toggle word wrap

    Maven 插件调配部署 Web 应用所需的子系统和模块。

    keycloak-client-oidc 层使用 keycloak 子系统及其依赖项向项目提供 Red Hat Single Sign-On OpenID Connect 客户端适配器,以激活对 Red Hat Single Sign-On 身份验证的支持。Red Hat Single Sign-On 客户端适配器是使用 Red Hat Single Sign-On 保护应用程序和服务的库。

  2. 在项目 pom.xml 文件中,在插件配置中将 <context-root > 设置为 false。这会将应用程序注册到 simple-webapp 资源路径中。默认情况下,WAR 文件在 root-context 路径下注册。

    <configuration>
        ...
         <context-root>false</context-root>
         ...
    </configuration>
    Copy to Clipboard Toggle word wrap
  3. 创建一个 CLI 脚本,如 configure-oidc.cli,并将它保存到可引导 JAR 的可访问目录中,如 APPLICATION_ROOT/scripts 目录,其中 APPLICATION_ROOT 是 Maven 项目的根目录。该脚本必须包含类似以下示例的命令:

    /subsystem=keycloak/secure-deployment=simple-webapp.war:add( \
        realm=demo, \
        resource=simple-webapp, \
        public-client=true, \
        auth-server-url=http://localhost:8090/auth/, \
        ssl-required=EXTERNAL)
    Copy to Clipboard Toggle word wrap

    此脚本示例在 keycloak 子系统中定义 secure-deployment=simple-webapp.war 资源。simple-webapp.war 资源是在可引导 JAR 中部署的 WAR 文件的名称。

  4. 在项目 pom.xml 文件中,将以下配置提取添加到现有插件 < configuration> 元素中:

    <cli-sessions>
        <cli-session>
            <script-files>
                <script>scripts/configure-oidc.cli</script>
            </script-files>
        </cli-session>
    </cli-sessions>
    Copy to Clipboard Toggle word wrap
  5. 更新 src/main/webapp/WEB-INF 目录中的 web.xml 文件。例如:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="4.0" xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
       metadata-complete="false">
    
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>Simple Realm</realm-name>
        </login-config>
    
    </web-app>
    Copy to Clipboard Toggle word wrap
  6. 可选: 通过添加 keycloak.json 描述符到 web 应用程序的 WEB-INF 目录中,您还可以将服务器配置嵌入到 web 应用中。例如:

    {
        "realm" : "demo",
        "resource" : "simple-webapp",
        "public-client" : "true",
        "auth-server-url" : "http://localhost:8090/auth/",
        "ssl-required" : "EXTERNAL"
    }
    Copy to Clipboard Toggle word wrap

    然后,您必须将 web 应用程序的 <auth-method > 设置为 KEYCLOAK。以下示例代码演示了如何设置 < auth-method>

        <login-config>
            <auth-method>KEYCLOAK</auth-method>
            <realm-name>Simple Realm</realm-name>
        </login-config>
    Copy to Clipboard Toggle word wrap
  7. 创建名为 SecuredServlet.java 的 Java 文件,其中包含以下内容,并将文件保存到 APPLICATION_ROOT/src/main/java/com/example/securedservlet/ 目录中。

    package com.example.securedservlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.Principal;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.HttpMethodConstraint;
    import javax.servlet.annotation.ServletSecurity;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/secured")
    @ServletSecurity(httpMethodConstraints = { @HttpMethodConstraint(value = "GET",
        rolesAllowed = { "Users" }) })
    public class SecuredServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try (PrintWriter writer = resp.getWriter()) {
                writer.println("<html>");
                writer.println("<head><title>Secured Servlet</title></head>");
                writer.println("<body>");
                writer.println("<h1>Secured Servlet</h1>");
                writer.println("<p>");
                writer.print(" Current Principal '");
                Principal user = req.getUserPrincipal();
                writer.print(user != null ? user.getName() : "NO AUTHENTICATED USER");
                writer.print("'");
                writer.println("    </p>");
                writer.println("  </body>");
                writer.println("</html>");
            }
        }
    }
    Copy to Clipboard Toggle word wrap
  8. 将应用打包为可引导 JAR。

    $ mvn package
    Copy to Clipboard Toggle word wrap
  9. 启动应用程序。以下示例从指定的可引导 JAR 路径启动 simple-webapp Web 应用程序:

    $ java -jar target/simple-webapp-bootable.jar
    Copy to Clipboard Toggle word wrap
  10. 在 Web 浏览器中指定以下 URL,以访问通过 Red Hat Single Sign-On 保护的网页。以下示例显示了安全 simple-webapp Web 应用程序的 URL:

    http://localhost:8080/simple-webapp/secured
    Copy to Clipboard Toggle word wrap
  11. 以来自您的 Red Hat Single Sign-On 域的用户身份登录。
  12. 验证 : 检查网页是否显示以下输出:

    Current Principal '<principal id>'
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部