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 製品のライフサイクル中に進化できます。- X は、Maven プラグインのメジャーバージョンです。
- y は、Maven プラグインのマイナーバージョンです。
- z は、Maven プラグインのマイクロバージョンです。/ga/org/wildfly/plugins/wildfly-jar-maven-plugin のインデックス を参照してください。
-
2.0.X.GA-redhat-BUILD_NUMBER
などの最新の Galleon feature-pack バージョンを確認している。X は JBoss EAP XP 2 のマイクロバージョンで、BUILD_NUMBER は Galleon 機能パックのビルド番号。X と BUILD_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 機能パックのビルド番号です。X と BUILD_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 URLhttp://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>
-
Maven プラグインバージョンの場合は、
-
手順
以下の内容を
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 でアプリケーションとサービスのセキュリティーを保護するライブラリーです。pom.xml
ファイルでは、プラグイン設定で<context-root>
をfalse
に設定します。これにより、simple-webapp
リソースパスにアプリケーションが登録されます。デフォルトでは、WAR ファイルは root-context パスで登録されます。<configuration> ... <context-root>false</context-root> ... </configuration>
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 ファイルの名前です。プロジェクトの
pom.xml
ファイルで、以下の設定抽出を既存のプラグイン<configuration>
要素に追加します。<cli-sessions> <cli-session> <script-files> <script>scripts/configure-oidc.cli</script> </script-files> </cli-session> </cli-sessions>
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>
オプション: ステップ 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>
以下の内容で
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>"); } } }
アプリケーションを起動可能な JAR としてパッケージ化します。
$ mvn package
アプリケーションを起動します。以下の例では、指定された起動可能な JAR パスから
simple-webapp
Web アプリケーションを起動します。$ java -jar target/simple-webapp-bootable.jar
Web ブラウザーで以下の URL を指定して、Red Hat Single Sign-On でセキュア化された Web ページにアクセスします。以下の例は、セキュアな
simple-webapp
Web アプリケーションの URL を示しています。http://localhost:8080/simple-webapp/secured
- Red Hat Single Sign-On レルムからユーザーとしてログインします。
検証: Web ページに以下の出力が表示されることを確認します。
Current Principal '<principal id>'
関連情報
- Red Hat Single Sign-On アダプターサブシステムの設定に関する情報は、Securing Applications and Services Guideの JBoss EAP Adapter を参照してください。
- プロジェクトに JBoss EAP JAR Maven を指定する方法は、起動可能な JAR サーバーの Galleon レイヤーの指定 を参照してください。