検索

2.4. SAML によるアプリケーションの保護

download PDF

Keycloak SAML アダプター機能パックによって提供される Galleon レイヤーを使用すると、Security Assertion Markup Language (SAML) で Web アプリケーションを保護できます。

Keycloak SAML アダプター機能パックについては、SAML を使用してアプリケーションを保護するための Keycloak SAML アダプター機能パック を参照してください。

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

2.4.1. JBoss EAP の SAML によるアプリケーションの保護

Keycloak SAML アダプター Galleon パックは、keycloak-samlkeycloak-client-saml、および keycloak-client-saml-ejb という 3 つのレイヤーを含む Galleon 機能パックです。この機能パックのレイヤーを使用して、Security Assertion Markup Language (SAML) を使用したシングルサインオンのアイデンティティープロバイダーとして Red Hat build of Keycloak を使用するために必要なモジュールと設定を JBoss EAP にインストールします。

次の表で各レイヤーの用途を説明します。

レイヤー適用対象説明

keycloak-saml

OpenShift

このレイヤーは、SAML クライアントの自動登録とともに Source to Image (s2i) に使用します。このレイヤーは cloud-default-config レイヤーと一緒に使用する必要があります。

keycloak-client-saml

ベアメタル、OpenShift

このレイヤーは、ベアメタル上の web-application に使用します。また、CLI スクリプトまたはデプロイメント設定で提供される keycloak-saml サブシステム設定を使用する Source to Image (s2i) に使用します。

keycloak-client-saml-ejb

ベアメタル

このレイヤーは、Jakarta Enterprise Beans にアイデンティティーを伝播するアプリケーションに使用します。

SAML の使用を有効にするには、keycloak-saml サブシステムまたはアプリケーション自体を設定できます。

デプロイメント設定

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

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

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

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

  • SAML 設定情報を含む keycloak-saml.xml というファイルを WEB-INF ディレクトリーに作成します。このファイルは SAML プロバイダーから取得できます。

    keycloak-saml.xml の例

    <keycloak-saml-adapter>
        <SP entityID=""
            sslPolicy="EXTERNAL"
            logoutPage="SPECIFY YOUR LOGOUT PAGE!">
            <Keys>
                <Key signing="true">
                    <PrivateKeyPem>PRIVATE KEY NOT SET UP OR KNOWN</PrivateKeyPem>
                    <CertificatePem>...</CertificatePem>
                </Key>
            </Keys>
            <IDP entityID="idp"
                 signatureAlgorithm="RSA_SHA256"
                 signatureCanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
                <SingleSignOnService signRequest="true"
                                     validateResponseSignature="true"
                                     validateAssertionSignature="false"
                                     requestBinding="POST"
                                     bindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
                <SingleLogoutService signRequest="true"
                                     signResponse="true"
                                     validateRequestSignature="true"
                                     validateResponseSignature="true"
                                     requestBinding="POST"
                                     responseBinding="POST"
                                     postBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"
                                     redirectBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
            </IDP>
        </SP>
    </keycloak-saml-adapter>

    PrivateKeyPem および CertificatePem の値は、クライアントごとに一意です。

サブシステムの設定

keycloak-saml サブシステムを設定することで、SAML を使用してアプリケーションを保護できます。サブシステム設定コマンドを含むクライアント設定ファイルは、Red Hat build of Keycloak から取得できます。詳細は、クライアントアダプター設定の生成 を参照してください。

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

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

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

前提条件

手順

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

    1. Clients をクリックし、Create client をクリックします。
    2. Client type として SAML を選択します。
    3. 保護するアプリケーションの URL を Client ID として入力します。たとえば、http://localhost:8080/simple-webapp-example/secured/ です。

      重要

      クライアント ID はアプリケーションの URL と正確に一致する必要があります。クライアント ID が一致しない場合は、次のようなエラーが表示されます。

      2023-05-17 19:54:31,586 WARN  [org.keycloak.events] (executor-thread-0) type=LOGIN_ERROR, realmId=eba0f106-389f-4216-a676-05fcd0c0c72e, clientId=null, userId=null, ipAddress=127.0.0.1, error=client_not_found, reason=Cannot_match_source_hash
    4. クライアント名を入力します。たとえば、jbeap-saml です。
    5. Next をクリックします。
    6. 以下の情報を入力します。

これで、設定したクライアントを使用して、JBoss EAP にデプロイした Web アプリケーションを保護できるようになりました。詳細は、SAML を使用した Web アプリケーションの保護 を参照してください。

2.4.3. SAML を使用した Web アプリケーションの保護

Keycloak SAML アダプター機能パックは、OpenShift 以外のデプロイメント用の keycloak-client-saml および keycloak-client-saml-ejb という 2 つのレイヤーを提供します。keycloak-client-saml レイヤーはサーブレットベースの Web アプリケーションの保護に、keycloak-client-saml-ejb は Jakarta Enterprise Beans アプリケーションの保護に使用します。

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

  • keycloak-saml サブシステムを設定する方法

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

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

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

前提条件

手順

  1. jboss-eap-installation-manager を使用して、必要な Keycloak SAML アダプターレイヤーをサーバーに追加します。利用可能なレイヤーの詳細は次のとおりです。

    • 機能パック: org.keycloak:keycloak-saml-adapter-galleon-pack
    • レイヤー:

      • keycloak-client-saml: このレイヤーを使用してサーブレットを保護します。
      • keycloak-client-saml-ejb: このレイヤーを使用して、サーブレットから Jakarta Enterprise Beans にアイデンティティーを伝播します。

        JBoss EAP での機能パックとレイヤーの追加については、Red Hat JBoss Enterprise Application Platform のインストール方法 ガイドの jboss-eap-installation-manager を使用した既存の JBoss EAP サーバーへの機能パックの追加 を参照してください。

  2. アプリケーションの 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 の値としてワイルドカード ** を使用します。
  3. 管理 CLI を使用するか、アプリケーションのデプロイメントを更新することにより、SAML でアプリケーションを保護します。

    • アプリケーションのデプロイメントを更新する場合

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

        <web-app>
        ...
            <login-config>
                <auth-method>SAML</auth-method>     1
            </login-config>
        ...
        </web-app>
        1
        SAML を使用してアプリケーションを保護します。
      2. Red Hat build of Keycloak から keycloak-saml.xml 設定ファイルをダウンロードし、アプリケーションの WEB-INF/ ディレクトリーに保存します。

        詳細は、クライアントアダプター設定の生成 を参照してください。

        keycloak-saml.xml の例

        <keycloak-saml-adapter>
            <SP entityID=""
                sslPolicy="EXTERNAL"
                logoutPage="SPECIFY YOUR LOGOUT PAGE!">
                <Keys>
                    <Key signing="true">
                        <PrivateKeyPem>PRIVATE KEY NOT SET UP OR KNOWN</PrivateKeyPem>
                        <CertificatePem>...</CertificatePem>
                    </Key>
                </Keys>
                <IDP entityID="idp"
                     signatureAlgorithm="RSA_SHA256"
                     signatureCanonicalizationMethod="http://www.w3.org/2001/10/xml-exc-c14n#">
                    <SingleSignOnService signRequest="true"
                                         validateResponseSignature="true"
                                         validateAssertionSignature="false"
                                         requestBinding="POST"
                                         bindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
                    <SingleLogoutService signRequest="true"
                                         signResponse="true"
                                         validateRequestSignature="true"
                                         validateResponseSignature="true"
                                         requestBinding="POST"
                                         responseBinding="POST"
                                         postBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"
                                         redirectBindingUrl="http://localhost:8180/realms/example_saml_realm/protocol/saml"/>
                </IDP>
            </SP>
        </keycloak-saml-adapter>

        PrivateKeyPem および CertificatePem の値は、クライアントごとに一意です。

    • 管理 CLI を使用する場合

      1. Red Hat build of Keycloak からクライアント設定ファイル keycloak-saml-subsystem.cli をダウンロードします。

        詳細は、クライアントアダプター設定の生成 を参照してください。

        keycloak-saml-subsystem.cli の例

        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/:add
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/:add(sslPolicy=EXTERNAL,logoutPage="SPECIFY YOUR LOGOUT PAGE!"
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/Key=KEY1:add(signing=true, \
        PrivateKeyPem="...", CertificatePem="...")
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/IDP=idp/:add( \
            SingleSignOnService={ \
                signRequest=true, \
                validateResponseSignature=true, \
                validateAssertionSignature=false, \
                requestBinding=POST, \
                bindingUrl=http://localhost:8180/realms/example-saml-realm/protocol/saml}, \
            SingleLogoutService={ \
                signRequest=true, \
                signResponse=true, \
                validateRequestSignature=true, \
                validateResponseSignature=true, \
                requestBinding=POST, \
                responseBinding=POST, \
                postBindingUrl=http://localhost:8180/realms/example-saml-realm/protocol/saml, \
                redirectBindingUrl=http://localhost:8180/realms/example-saml-realm/protocol/saml} \
        )
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/IDP=idp/:write-attribute(name=signatureAlgorithm,value=RSA_SHA256)
        
        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP="http://localhost:8080/simple-webapp-example/"/IDP=idp/:write-attribute(name=signatureCanonicalizationMethod,value=http://www.w3.org/2001/10/xml-exc-c14n#)

        PrivateKeyPem および CertificatePem の値は、クライアントごとに一意です。

      2. クライアント設定ファイル内のすべての YOUR-WAR.war を、実際のアプリケーション WAR の名前 (例: simple-webapp-example.war) で更新します。

        注記

        生成される CLI スクリプトの 2 番目のステートメントの末尾には、) がありません。

        /subsystem=keycloak-saml/secure-deployment=YOUR-WAR.war/SP=""/:add(sslPolicy=EXTERNAL,logoutPage="SPECIFY YOUR LOGOUT PAGE!"

        不足している ) を追加する必要があります。

      3. 管理 CLI を使用して keycloak-saml-subsystem.cli スクリプトを実行して、JBoss EAP を設定します。

        $ <EAP_HOME>/bin/jboss-cli.sh -c --file=<path_to_the_file>/keycloak-saml-subsystem.cli
  4. アプリケーションをデプロイします。

    $ mvn wildfly:deploy

検証

  1. ブラウザーで、アプリケーションの URL に移動します。たとえば、http://localhost:8080/simple-webapp-example/secured です。

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.