9.3. Securing applications using OpenID Connect with Red Hat Single Sign-On


OpenID Connect (OIDC) を使用して、認証を外部の OpenID プロバイダーに委任できます。elytron-oidc-client サブシステムは、外部の OpenID プロバイダーと接続するための JBoss EAP のネイティブ OIDC クライアントを提供します。

Red Hat Single Sign-On を使用して OpenID Connect でセキュリティー保護されたアプリケーションを作成するには、次の手順に従います。

9.3.1. OpenID プロバイダーとしての Red Hat Single Sign-On の設定

Red Hat Single Sign-On は、Single Sign-On (SSO) で Web アプリケーションをセキュリティー保護するための ID およびアクセス管理プロバイダーです。OpenID Connect (OAuth 2.0 のエクステンション) をサポートしています。

前提条件

  • Red Hat Single Sign-On サーバーをインストールしました。詳細については、Red Hat Single Sign-On Getting Started GuideInstalling the Red Hat Single Sign-On server を参照してください。
  • Red Hat Single Sign-On サーバーインスタンスにユーザーを作成しました。詳細については、Red Hat Single Sign-On Getting Started GuideCreating a user を参照してください。

手順

  1. JBoss EAP のデフォルトポートは 8080 であるため、Red Hat Single Sign-On サーバーを 8080 以外のポートで起動します。

    構文

    $ RH_SSO_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=<offset-number>

    例:

    $ /home/servers/rh-sso-7.4/bin/standalone.sh -Djboss.socket.binding.port-offset=100

  2. http://localhost:<port>/auth/ で管理コンソールにログインします。たとえば、http://localhost:8180/auth/ です。
  3. レルムを作成するには、管理コンソールで Master にカーソルを合わせ、Add realm をクリックします。
  4. レルムの名前を入力します。たとえば、example_realmEnabledオン になっていることを確認し、Create をクリックします。
  5. Users をクリックし、ユーザーの Add user をクリックしてユーザーをレルムに追加します。
  6. ユーザー名を入力。たとえば、jane_doe。User EnabledON になっていることを確認し、Save をクリックします。
  7. Credentials をクリックして、ユーザーにパスワードを追加します。
  8. ユーザーのパスワードを設定します。たとえば、janedoep@$$TemporaryOFF に切り替えて、Set Password をクリックします。確認プロンプトで、Set password をクリックします。
  9. Clients をクリックし、Create をクリックしてクライアント接続を設定します。
  10. クライアント ID を入力します。たとえば、my_jbeapClient Protocolopenid-connect に設定されていることを確認し、Save をクリックします。
  11. Installation をクリックし、Format Option として Keycloak OIDC JSON を選択して、接続パラメーターを確認します。

    {
      "realm": "example_realm",
      "auth-server-url": "http://localhost:8180/auth/",
      "ssl-required": "external",
      "resource": "my_jbeap",
      "public-client": true,
      "confidential-port": 0
    }

    Red Hat Single Sign-On をアイデンティティプロバイダーとして使用するように JBoss EAP アプリケーションを設定する場合は、次のようにパラメーターを使用します。

    "provider-url" : "http://localhost:8180/auth/realms/example_realm",
    "ssl-required": "external",
    "client-id": "my_jbeap",
    "public-client": true,
    "confidential-port": 0
  12. Clients をクリックし、my_jbeap の横にある Edit をクリックしてクライアント設定を編集します。
  13. Valid Redirect URIs に、認証が成功した後にページがリダイレクトする URL を入力します。

    この例では、この値を http://localhost:8080/simple-oidc-example/secured/* に設定します

9.3.2. セキュアなアプリケーションを作成するための Maven プロジェクトの設定

セキュリティー保護されたアプリケーションを作成するために必要な依存関係とディレクトリー構造を使用して Maven プロジェクトを作成します。

前提条件

手順

  1. mvn コマンドを使用して Maven プロジェクトを設定します。このコマンドは、プロジェクトのディレクトリー構造と pom.xml 設定ファイルを作成します。

    構文

    $ mvn archetype:generate \
    -DgroupId=${group-to-which-your-application-belongs} \
    -DartifactId=${name-of-your-application} \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

    $ mvn archetype:generate \
    -DgroupId=com.example.oidc \
    -DartifactId=simple-oidc-example \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

  2. アプリケーションのルートディレクトリーに移動します。

    構文

    $ cd <name-of-your-application>

    $ cd simple-oidc-example

  3. 生成された pom.xml ファイルを次のように更新します。

    1. 以下のプロパティーを設定します。

      <properties>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
          <failOnMissingWebXml>false</failOnMissingWebXml>
          <version.server.bom>4.0.0.GA</version.server.bom>
          <version.server.bootable-jar>4.0.0.GA</version.server.bootable-jar>
          <version.wildfly-jar.maven.plugin>4.0.0.GA</version.wildfly-jar.maven.plugin>
      </properties>
    2. 次の依存関係を設定します。

      <dependencies>
          <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0.redhat-1</version>
            <scope>provided</scope>
          </dependency>
      </dependencies>
    3. mvn widlfy:deploy を使用してアプリケーションをデプロイするには、次のビルド設定を設定します。

      <build>
          <finalName>${project.artifactId}</finalName>
          <plugins>
              <plugin>
                  <groupId>org.wildfly.plugins</groupId>
                  <artifactId>wildfly-maven-plugin</artifactId>
                  <version>2.1.0.Final</version>
              </plugin>
          </plugins>
      </build>

検証

  • アプリケーションのルートディレクトリーで、次のコマンドを入力します。

    $ mvn install

    次のような出力が得られます。

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.440 s
    [INFO] Finished at: 2021-12-27T14:45:12+05:30
    [INFO] ------------------------------------------------------------------------

これで、セキュアなアプリケーションを作成できます。

9.3.3. OpenID Connect を使用するセキュアなアプリケーションの作成

アプリケーションをセキュリティー保護するには、デプロイメント設定を更新するか、elytron-oidc-client サブシステムを設定します。次の例は、ログインしたユーザーのプリンシパルを出力するサーブレットの作成を示しています。既存のアプリケーションの場合、デプロイメント設定または elytron-oidc-client サブシステムの更新に関連するステップのみが必要です。

この例では、プリンシパルの値は OpenID プロバイダーの ID トークンから取得されます。デフォルトでは、プリンシパルはトークンからの "sub" クレームの値です。次のいずれかで、ID トークンからプリンシパルとして使用するクレーム値を指定できます。

  • elytron-oidc-client サブシステム属性 principal-attribute
  • oidc.json ファイル。

プロシージャの <application_root> は、pom.xml ファイルディレクトリーを示します。pom.xml ファイルには、アプリケーションの Maven 設定が含まれています。

前提条件

手順

  1. Java ファイルを保存するディレクトリーを作成します。

    構文

    $ mkdir -p <application_root>/src/main/java/com/example/oidc

    $ mkdir -p simple-oidc-example/src/main/java/com/example/oidc

  2. 新しいディレクトリーに移動します。

    構文

    $ cd <application_root>/src/main/java/com/example/oidc

    $ cd simple-oidc-example/src/main/java/com/example/oidc

  3. 次の内容のサーブレット SecuredServlet.java を作成します。

    package com.example.oidc;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.Principal;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * A simple secured HTTP servlet.
     *
     */
    @WebServlet("/secured")
    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>");
            }
        }
    
    }
  4. アプリケーションの 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">
    
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>secured</web-resource-name>
                <url-pattern>/secured</url-pattern>
            </web-resource-collection>
            <auth-constraint>
                <role-name>*</role-name>
            </auth-constraint>
        </security-constraint>
    
        <security-role>
            <role-name>*</role-name>
        </security-role>
    </web-app>
  5. OpenID Connect を使用してアプリケーションをセキュリティー保護するには、デプロイメント設定を更新するか、elytron-oidc-client サブシステムを設定します。

    注記

    デプロイメント設定と elytron-oidc-client サブシステムの両方で OpenID Connect を設定する場合、elytron-oidc-client サブシステムの secure-deployment 属性の設定は、アプリケーションデプロイメント記述子の設定よりも優先されます。

    • デプロイメント設定の更新:

      1. 次のように、WEB-INF ディレクトリーにファイル oidc.json を作成します。

        {
          "provider-url" : "http://localhost:8180/auth/realms/example_realm",
          "ssl-required": "external",
          "client-id": "my_jbeap",
          "public-client": true,
          "confidential-port": 0
        }
      2. デプロイメント記述子 web.xml ファイルを次のテキストで更新して、このアプリケーションが OIDC を使用することを宣言します。

        <login-config>
            <auth-method>OIDC</auth-method>
        </login-config>
    • elytron-oidc-client サブシステムの設定:

      • アプリケーションを保護するには、次の管理 CLI コマンドを使用します。

        /subsystem=elytron-oidc-client/secure-deployment=simple-oidc-example.war/:add(client-id=my_jbeap,provider-url=http://localhost:8180/auth/realms/example_realm,public-client=true,ssl-required=external)
  6. アプリケーションのルートディレクトリーで、次のコマンドを使用してアプリケーションをコンパイルします。

    $ mvn package
  7. アプリケーションをデプロイします。

    $ mvn wildfly:deploy

検証

  1. ブラウザーで、http://localhost:8080/simple-oidc-example/secured に移動します。
  2. クレデンシャルを使用してログインします。以下に例を示します。

    username: jane_doe
    password: janedoep@$$

    次の出力が得られます。

    Secured Servlet
    Current Principal '5cb0c4ca-0477-44c3-bdef-04db04d7e39d'

    これで、Red Hat Single Sign-On で OpenID プロバイダーとして設定したクレデンシャルを使用してアプリケーションにログインできます。

9.3.4. ユーザーのロールに基づいてアプリケーションへのアクセスを制限する

ユーザーのロールに基づいて、アプリケーションのすべてまたは一部へのアクセスを制限できます。たとえば、public ロールを持つユーザーに、機密性の低いアプリケーションの部分へのアクセスを許可し、admin ロールを持つユーザーに、機密性の高い部分へのアクセス権を与えることができます。

前提条件

手順

  1. デプロイメント記述子 web.xml ファイルを次のテキストで更新します。

    構文

    <security-constraint>
        ...
        <auth-constraint>
            <role-name><allowed_role></role-name>
        </auth-constraint>
    </security-constraint>

    <security-constraint>
        ...
        <auth-constraint>
            <role-name>example_role</role-name> 
    1
    
        </auth-constraint>
    </security-constraint>

    1
    ロール example_role を持つユーザーのみにアプリケーションへのアクセスを許可します。
  2. アプリケーションのルートディレクトリーで、次のコマンドを使用してアプリケーションを再コンパイルします。

    $ mvn package
  3. アプリケーションをデプロイします。

    $ mvn wildfly:deploy

検証

  1. ブラウザーで、http://localhost:8080/simple-oidc-example/secured に移動します。
  2. クレデンシャルを使用してログインします。以下に例を示します。

    username: jane_doe
    password: janedoep@$$

    次の出力が得られます。

    Forbidden

    ユーザー jane_doe に必要なロールを割り当てていないため、jane_doe はアプリケーションにログインできません。必要なロールを持つユーザーのみがログインできます。

ユーザーに必要なロールを割り当てるには、Creating and assigning roles to users in Red Hat Single Sign-On を参照してください。

9.3.5. Red Hat Single Sign-On でのユーザーロールの作成と割り当て

Red Hat Single Sign-On は、シングルサインオン (SSO) を使用して Web アプリケーションを保護するためのアイデンティティーおよびアクセス管理プロバイダーです。Red Hat Single Sign-On でユーザーを定義し、ロールを割り当てることができます。

前提条件

手順

  1. http://localhost:<port>/auth/ で管理コンソールにログインします。たとえば、http://localhost:8180/auth/ です。
  2. JBoss EAP との接続に使用するレルムをクリックします。たとえば、example_realm
  3. Clients をクリックしてから、JBoss EAP 用に設定した client-name をクリックします。たとえば、my_jbeap
  4. RolesAdd Role の順にクリックします。
  5. example_role などのロール名を入力し、Save をクリックします。これは、JBoss EAP で承認のために設定するロール名です。
  6. UsersView all users の順にクリックします。
  7. ID をクリックして、作成したロールを割り当てます。たとえば、jane_doe の ID をクリックします。
  8. Role Mappings をクリックします。Client Roles フィールドで、JBoss EAP 用に設定した client-name を選択します。たとえば、my_jbeap
  9. Available Roles で、割り当てるロールを選択します。たとえば、example_roleAdd selected をクリックします。

検証

  1. ブラウザーで、アプリケーションの URL に移動します。
  2. クレデンシャルを使用してログインします。以下に例を示します。

    username: jane_doe
    password: janedoep@$$

    次の出力が得られます。

    Secured Servlet
    Current Principal '5cb0c4ca-0477-44c3-bdef-04db04d7e39d'

    必要なロールを持つユーザーは、アプリケーションにログインできます。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る