検索

2.3. OIDC によるアプリケーションの保護

download PDF

JBoss EAP のネイティブ OpenID Connect (OIDC) クライアントを使用し、外部の OpenID プロバイダーを使用してアプリケーションを保護します。OIDC は、JBoss EAP などのクライアントが OpenID プロバイダーによって実行される認証に基づいてユーザーのアイデンティティーを検証できるようにするアイデンティティーレイヤーです。たとえば、Red Hat build of Keycloak を OpenID プロバイダーとして使用して、JBoss EAP アプリケーションを保護できます。

OIDC を使用してアプリケーションを保護するには、次の手順に従います。

2.3.1. JBoss EAP の OpenID Connect によるアプリケーションの保護

OpenID プロバイダーを使用してアプリケーションを保護する場合、セキュリティードメインリソースをローカルで設定する必要はありません。elytron-oidc-client サブシステムは、OpenID プロバイダー (OP) に接続するための JBoss EAP のネイティブ OpenID Connect (OIDC) クライアントを提供します。JBoss EAP は、OpenID プロバイダーの設定に基づいて、アプリケーションの仮想セキュリティードメインを自動的に作成します。elytron-oidc-client サブシステムは、Relying Party (RP) として機能します。

注記

JBoss EAP のネイティブ OIDC クライアントは、RP が開始するログアウトをサポートしません。

重要

OIDC クライアントは Red Hat build of Keycloak で使用することを推奨します。JSON Web トークン (JWT) であるアクセストークンを使用するように設定でき、RS256、RS384、RS512、ES256、ES384、または ES512 署名アルゴリズムを使用するように設定できる場合は、他の OpenID プロバイダーを使用できます。

OIDC の使用を有効にするには、elytron-oidc-client サブシステムまたはアプリケーション自体を設定できます。JBoss EAP は、次のように OIDC 認証をアクティブにします。

  • アプリケーションを JBoss EAP にデプロイすると、elytron-oidc-client サブシステムがデプロイメントをスキャンして、OIDC 認証メカニズムが必要かどうかを検出します。
  • サブシステムが elytron-oidc-client サブシステムまたはアプリケーションデプロイメント記述子のいずれかでデプロイメントの OIDC 設定を検出した場合、JBoss EAP はアプリケーションの OIDC 認証メカニズムを有効にします。
  • サブシステムが両方の場所で OIDC 設定を検出した場合、elytron-oidc-client サブシステム secure-deployment 属性の設定が、アプリケーションデプロイメント記述子の設定よりも優先されます。
デプロイメント設定

デプロイメント記述子を使用して OIDC でアプリケーションを保護するには、アプリケーションのデプロイメント設定を次のように更新します。

  • アプリケーションデプロイメント記述子 web.xml ファイルで auth-method プロパティーを OIDC に設定します。

デプロイメント記述子の更新例

<login-config>
    <auth-method>OIDC</auth-method>
</login-config>

  • OIDC 設定情報を含む oidc.json というファイルを WEB-INF ディレクトリーに作成します。

    oidc.json コンテンツの例

    {
      "client-id" : "customer-portal", 1
      "provider-url" : "http://localhost:8180/realms/demo", 2
      "ssl-required" : "external", 3
       "credentials" : {
          "secret" : "234234-234234-234234" 4
       }
    }

    1
    OpenID プロバイダーで OIDC クライアントを識別するための名前。
    2
    OpenID プロバイダーの URL。
    3
    外部リクエストには HTTPS が必要です。
    4
    OpenID プロバイダーに登録されたクライアントシークレット。
サブシステムの設定

次の方法で elytron-oidc-client サブシステムを設定することで、OIDC を使用してアプリケーションを保護できます。

  • アプリケーションごとに同じ OpenID プロバイダーを使用する場合は、複数のデプロイメントに対して単一の設定を作成します。
  • アプリケーションごとに異なる OpenID プロバイダーを使用する場合は、デプロイメントごとに異なる設定を作成します。

単一デプロイメントの XML 設定の例:

<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
    <secure-deployment name="DEPLOYMENT_RUNTIME_NAME.war"> 1
        <client-id>customer-portal</client-id> 2
        <provider-url>http://localhost:8180/realms/demo</provider-url> 3
        <ssl-required>external</ssl-required> 4
        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" /> 5
    </secure-deployment
</subsystem>
1
デプロイメントランタイム名。
2
OpenID プロバイダーで OIDC クライアントを識別するための名前。
3
OpenID プロバイダーの URL。
4
外部リクエストには HTTPS が必要です。
5
OpenID プロバイダーに登録されたクライアントシークレット。

同じ OpenID プロバイダーを使用して複数のアプリケーションを保護するには、次の例に示すように、provider を個別に設定します。

<subsystem xmlns="urn:wildfly:elytron-oidc-client:1.0">
    <provider name="${OpenID_provider_name}">
        <provider-url>http://localhost:8080/realms/demo</provider-url>
        <ssl-required>external</ssl-required>
    </provider>
    <secure-deployment name="customer-portal.war"> 1
        <provider>${OpenID_provider_name}</provider>
        <client-id>customer-portal</client-id>
        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
    </secure-deployment>
    <secure-deployment name="product-portal.war"> 2
        <provider>${OpenID_provider_name}</provider>
        <client-id>product-portal</client-id>
        <credential name="secret" secret="0aa31d98-e0aa-404c-b6e0-e771dba1e798" />
    </secure-deployment>
</subsystem>
1
デプロイメント: customer-portal.war
2
別のデプロイメント: product-portal.war

2.3.2. Red Hat build of Keycloak での OIDC クライアントの作成

Red Hat build of Keycloak で OpenID Connect (OIDC) クライアントを作成し、JBoss EAP で使用してアプリケーションを保護します。

以下の手順は、テスト目的で Red Hat build of Keycloak を使用して JBoss EAP にデプロイしたアプリケーションの保護を開始するために必要な最小限の手順を示しています。詳細な設定については、Red Hat build of Keycloak サーバー管理ガイドの OpenID Connect クライアントの管理 を参照してください。

前提条件

手順

  1. Red Hat build of Keycloak 管理コンソールに移動します。
  2. クライアントを作成します。

    1. Clients をクリックし、Create client をクリックします。
    2. Client typeOpenID Connect に設定されていることを確認します。
    3. クライアント ID を入力します。たとえば、jbeap-oidc です。
    4. Next をクリックします。
    5. Capability Config タブで、Authentication FlowStandard flow および Direct access grants に設定されていることを確認します。
    6. Next をクリックします。
    7. Login settings タブで、Valid redirect URIs の値を入力します。認証成功後のページのリダイレクト先 URL を入力します (例: http://localhost:8080/simple-webapp-example/secured/*)。
    8. Save をクリックします。
  3. アダプターの設定を表示します。

    1. Action をクリックし、Download adapter config をクリックします。
    2. Keycloak OIDC JSONFormat Option として選択して、接続パラメーターを確認します。

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

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

      "provider-url" : "http://localhost:8180/realms/example_realm",
      "ssl-required": "external",
      "client-id": "jbeap-oidc",
      "public-client": true,
      "confidential-port": 0

2.3.3. OpenID Connect を使用した Web アプリケーションの保護

アプリケーションを保護するには、そのデプロイメント設定を更新するか、elytron-oidc-client サブシステムを設定します。

Web アプリケーションの作成 の手順で作成したアプリケーションを使用する場合、Principal の値は OpenID プロバイダーの ID トークンから取得されます。デフォルトでは、Principal はトークンからの "sub" クレームの値です。“email”、“preferred_username”、“name”、“given_name”、“family_name”、または “nickname” クレームの値をプリンシパルとして使用することもできます。次のいずれかの場所で、ID トークンのどのクレーム値をプリンシパルとして使用するかを指定します。

  • elytron-oidc-client サブシステム属性 principal-attribute
  • The oidc.json file

OIDC を使用するようにアプリケーションを設定するには、次の 2 つの方法があります。

  • elytron-oidc-client サブシステムを設定する方法

    アプリケーションのデプロイメントに設定を追加しない場合は、この方法を使用します。

  • デプロイメント設定を更新する方法

    サーバーに設定を追加せず、アプリケーションのデプロイメント内に設定を保持する場合は、この方法を使用します。

前提条件

  • JBoss EAP にアプリケーションをデプロイしました。

手順

  1. アプリケーションの 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>Admin</role-name>    1
            </auth-constraint>
        </security-constraint>
    
        <security-role>
            <role-name>*</role-name>
        </security-role>
    </web-app>
    1
    Admin ロールを持つユーザーのみがアプリケーションにアクセスできるようにします。任意のロールを持つユーザーがアプリケーションにアクセスできるようにするには、role-name の値としてワイルドカード ** を使用します。
  2. OpenID Connect を使用してアプリケーションを保護するには、デプロイメント設定を更新するか、elytron-oidc-client サブシステムを設定します。

    注記

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

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

      1. 認証方法として OIDC を指定するログイン設定を、アプリケーションの web.xml に追加します。

        <web-app>
        ...
            <login-config>
                <auth-method>OIDC</auth-method>     1
            </login-config>
        ...
        </web-app>
        1
        OIDC を使用してアプリケーションを保護します。
      2. 次のように、WEB-INF ディレクトリーにファイル oidc.json を作成します。

        {
          "provider-url" : "http://localhost:8180/realms/example_realm",
          "ssl-required": "external",
          "client-id": "jbeap-oidc",
          "public-client": true,
          "confidential-port": 0
        }
    • elytron-oidc-client サブシステムの設定:

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

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

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

    $ mvn wildfly:deploy

検証

  1. ブラウザーで http://localhost:8080/simple-webapp-example/secured に移動します。

    Red Hat build of Keycloak のログインページにリダイレクトされます。

  2. Red Hat build of Keycloak で定義したユーザーの認証情報を使用してログインできます。

これで、アプリケーションは OIDC を使用して保護されました。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.