8.15. Red Hat Single Sign-On での JBoss EAP の起動可能な JAR アプリケーションのセキュア化

Galleon keycloak-client-oidc レイヤーを使用して、Red Hat Single Sign-On 7.4 OpenID Connect クライアントアダプターでプロビジョニングされたバージョンのサーバーをインストールできます。

keycloak-client-oidc レイヤーは、Red Hat Single Sign-On OpenID Connect クライアントアダプターを Maven プロジェクトに提供します。このレイヤーは、keycloak-adapter-galleon-pack Red Hat Single Sign-On 機能パックに含まれています。

keycloak-adapter-galleon-pack 機能パックを JBoss EAP Maven プラグイン設定に追加し、keycloak-client-oidc を追加できます。Supported Configurations: Red Hat Single Sign-On 7.4 ページにアクセスすると、JBoss EAP と互換性のある Red Hat Single Sign-On クライアントアダプターを表示できます。

この手順の例では、keycloak-client-oidc レイヤーによって提供される JBoss EAP の機能を使用し、JBoss EAP の起動可能な JAR をセキュアにする方法を説明します。

要件

  • Maven がインストールされている。
  • X.Y.Z.Final-redhat-_BUILD_NUMBER などの最新の Maven プラグインバージョンを確認している。Z および BUILD_NUMBER は、Red Hat Single Sign-On および JBoss EAP XP 2.0.0 製品のライフサイクル中に進化できます。

  • 2.0.X.GA-redhat-BUILD_NUMBER などの最新の Galleon feature-pack バージョンを確認している。X は JBoss EAP XP 2 のマイクロバージョンで、BUILD_NUMBER は Galleon 機能パックのビルド番号。XBUILD_NUMBER は、JBoss EAP XP 2.0.0 製品のライフサイクル中に進化できます。Index of /ga/org/jboss/eap/wildfly-galleon-pack のインデックス を参照してください。
  • org.jboss.sso:keycloak-adapter-galleon-pack:9.0.X:redhat-BUILD_NUMBER などの最新の Red Hat Single Sign-On Galleon 機能パックバージョンを確認している。X は、アプリケーションのセキュア化に使用する Red Hat Single Sign-On のマイクロバージョンである Red Hat Single Sign-On のマイクロバージョンです。BUILD_NUMBER は Red Hat Single Sign-On Galleon 機能パックのビルド番号です。XBUILD_NUMBER は、Red Hat Single Sign-On 製品のライフサイクル中に進化できます。/ga/org/jboss/sso/keycloak-adapter-galleon-pack のインデックス を参照してください。
  • Red Hat Single Sign-On でセキュア化するアプリケーションを作成するために、Maven プロジェクトを作成し、親依存関係を設定して依存関係を追加している。起動可能な JAR Maven プロジェクトの作成 を参照してください。
  • 8090 ポートで実行している Red Hat Single Sign-On サーバーがある。Red Hat Single Sign-On サーバーの起動 を参照してください。
  • Red Hat Single Sign-On 管理コンソールにログインし、以下のメタデータを作成している。

    • demo という名前のレルム。
    • Users という名前のロール。
    • ユーザーおよびパスワードUsers ロールをユーザーに割り当てる必要があります。
    • ルート URL を含むパブリッククライアントの Web アプリケーション。この手順の例では、web アプリケーションおよび Root URL http://localhost:8080/simple-webapp/secured として simple-webapp を定義します。

      重要

      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
      注記

      この手順の例では、以下のプロパティーを指定します。

      • Maven プラグインバージョンの場合は、${bootable.jar.maven.plugin.version} です。
      • Galleon 機能パックバージョンの場合は、${jboss.xp.galleon.feature.pack.version} です。
      • Red Hat Single Sign-On 機能パックバージョンの場合は、${keycloak.feature.pack.version} です。

      これらのプロパティーをプロジェクトで設定する必要があります。以下に例を示します。

      <properties>
          <bootable.jar.maven.plugin.version>2.0.2.Final-redhat-00001</bootable.jar.maven.plugin.version>
          <jboss.xp.galleon.feature.pack.version>2.0.0.GA-redhat-00002</jboss.xp.galleon.feature.pack.version>
          <keycloak.feature.pack.version>9.0.10.redhat-00001</keycloak.feature.pack.version>
      </properties>

手順

  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.jboss.sso: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>

    Maven プラグインは、Web アプリケーションのデプロイに必要なサブシステムとモジュールをプロビジョニングします。

    keycloak-client-oidc レイヤーは、keycloak サブシステムとその依存関係を使用して Red Hat Single Sign-On 認証のサポートをアクティベートすることで、Red Hat Single Sign-On の OpenID Connect クライアントアダプターをプロジェクトに提供します。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>
  3. configure-oidc.cli などの CLI スクリプトを作成し、APPLICATION_ROOT/scripts ディレクトリーなどの起動可能な JAR のアクセス可能なディレクトリーに保存します。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)

    このスクリプトの例では、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>
  5. src/main/webapp/WEB-INF ディレクトリーの web.xml ファイルを更新します。以下に例を示します。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="2.5" 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_2_5.xsd"
       metadata-complete="false">
    
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>Simple Realm</realm-name>
        </login-config>
    
    </web-app>
  6. オプション: ステップ 7 から 9 の代わりに、keycloak.json 記述子を web アプリケーションの WEB-INF ディレクトリーに追加して、Web アプリケーションにサーバー設定を埋め込むことも可能です。以下に例を示します。

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

    次に、Web アプリケーションの <auth-method>KEYCLOAK に設定する必要があります。以下のコード例は、<auth-method> を設定する方法を示しています。

        <login-config>
            <auth-method>KEYCLOAK</auth-method>
            <realm-name>Simple Realm</realm-name>
        </login-config>
  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>");
            }
        }
    }
  8. アプリケーションを起動可能な JAR としてパッケージ化します。

    $ mvn package
  9. アプリケーションを起動します。以下の例では、指定された起動可能な JAR パスから simple-webapp Web アプリケーションを起動します。

    $ java -jar target/simple-webapp-bootable.jar
  10. Web ブラウザーで以下の URL を指定して、Red Hat Single Sign-On でセキュア化された Web ページにアクセスします。以下の例は、セキュアな simple-webapp Web アプリケーションの URL を示しています。

    http://localhost:8080/simple-webapp/secured
  11. Red Hat Single Sign-On レルムからユーザーとしてログインします。
  12. 検証: Web ページに以下の出力が表示されることを確認します。

    Current Principal '<principal id>'

関連情報