フェデレーション Java SDK の使用

目次
casso126jjp
目次
オープン形式の Cookie を使用した、依存パーティでのプログラム フロー
依存パーティでの Java SDK プログラム フローの簡単な説明を以下に示します。
  1. Java アプリケーションは、IdentityFactory インターフェースを使用して、IFederationOpenIdentity インターフェースの実装クラスを作成します。
  2. Java アプリケーションは、extractCookie() メソッドを呼び出して HttpServletRequest オブジェクトから Cookie を抽出します。このメソッドはまた、Cookie を復号し、ストレージ マップに ID 属性を入れます。
  3. あるいは、Java アプリケーションは、processCookie() メソッドを呼び出して Cookie オブジェクトから属性をすべて抽出し、ストレージ マップにそれらを設定することもできます。
  4. Java アプリケーションは、getAttributes()、getAttribute()、getAuthnContext()、getSessionID()、getNameID()、getNameIDFormat() および getUserConsent() メソッドを使用して、ストレージ マップに入れられたすべての属性に対する値を取得できます。
  5. Java アプリケーションは、setAuthnContext() および setUserConsent() メソッドを使用して、Cookie に属性の値を設定できます。
  6. Java アプリケーションは、スキュー時間を指定するしないにかかわらず、isExpired() メソッドを呼び出すことで Cookie が有効期限切れかどうかを判断できます。このメソッドは、オプションのスキュー時間に追加して、Cookie 上の有効期限スタンプを現在の GMT 時間と比較します。GMT 時間のほうが大きい場合、Cookie は期限切れです。Cookie の有効期限スタンプは、Cookie が作成されるときに setTimeToLive () メソッドを使用して指定されます。
これらのメソッドの詳細情報については Javadoc の参考資料を参照してください。
オープン形式 Cookie を使用した委任認証
委任認証により、サードパーティ アクセス管理システムはユーザを認証し、アサーティング パーティで展開した
Single Sign-On
とユーザ認証情報を共有することができます。これらの認証情報は Cookie によって、またはクエリ文字列で共有されます。
注:
このドキュメントでは、Cookie および Java SDK を使用した、委任認証について説明します。
サードパーティ アクセス管理者およびアサーティング パーティが認証されたユーザ ID を通信するために Cookie を使用する予定である場合は、アクセス制御アプリケーションはこれらの手順に従うことができます。
  1. フェデレーション Java SDK を実装します。
  2. IFederationOpenIdentity インターフェースの実装クラスを構成します。
  3. createCookie メソッドを呼び出します。
実装クラスを構成するには、アクセス制御管理者はフェデレーション製品で設定された Cookie ゾーンおよびパスワードを知っている必要があります。これらの値は帯域外で通信されます。サードパーティ アクセス管理システムは、アサーティング パーティと同じ Cookie ドメインにある必要があります。
委任認証用の Cookie を作成するときに使用する IdentityFactory.java クラスからのコンストラクタが以下にリスト表示されています。
   /** 
    * Gets an implementation of the IFederationOpenIdentity interface.
    *
    * @param cryptoInstance A cryptographic string; supported values are
    *  listed in IdentityCrypto.java.
    * @param bUseHmac A Boolean value that indicates whether to use HMAC. 
    */
     public static IFederationOpenIdentity getInstance(cryptoInstance, bUseHmac)
アクセス制御管理者はパスワード ベースの暗号化を使用して、Cookie 自体を暗号化できます。または、その Cookie は FIPS 準拠の暗号文字列の 1 つを使用できます。FIPS 準拠の文字列を選んだ場合は、Java SDK によって提供される暗号化を使用します。
ここに、Cookie 作成のコード スニペットの例を示します。
IFederationOpernIdentity openID = IdentityFactory.getInstance(IdentityCrypto.AES128, false);
String domain = ".moon.com";
String zone = "FED";
String name = "CryptoID"
String password = "";
 
openID.initCookieInfo(domain, zone, name, password);
 
openID.setLoginID = "TomJones";
 
openID.createCookie(HttpResponse);
createCookie メソッドは、ログイン ID を使用して、暗号化され HttpSevletResponse オブジェクトに追加される Cookie 値を作成します。要求がリダイレクトされた後、サーブレット コンテナは自動的に Cookie を渡します。
フェデレーション Java SDK のログ記録
デフォルト Java SDK ロガーは、標準出力ストリームへのメッセージを書き込みます。ロギングは、デフォルトでは無効になっています。
フェデレーション Java SDK のログ記録を有効にする方法
  1. sdkroot
    \ サンプル フォルダから sdkloggingconfig.properties ファイルをコピーし、任意のフォルダにそれを置きます。フォルダが CLASSPATH にあることを確認します。
  2. sdkloggingconfig.properties ファイルで sdk.logging.enable パラメータの値を Y に設定します。
ロギングが有効になります。
Java SDK サンプル アプリケーションの概要
Java SDK サンプル アプリケーションは依存パーティ Java アプリケーションをシミュレートします。アプリケーションは、フェデレーション パートナーシップの依存パーティで実行するフェデレーション システムによって送信された Cookie を消費します。
サンプル アプリケーションは、Java アプリケーションが受信要求から Cookie を取得し、依存パーティに送信されるユーザ ID 情報およびアサーション属性を抽出する方法について実証します。このサンプル アプリケーションでは、
CA SiteMinder® Federation
が依存パーティでインストールされ、ユーザをサンプル アプリケーション サーブレットの URL にリダイレクトするよう設定される必要があります。
依存パーティでの Java SDK サンプル アプリケーションの展開
Java SDK サンプル アプリケーションの展開には、依存パーティで Tomcat および
CA SiteMinder® Federation
をインストールする必要があります。
Java SDK サンプル アプリケーションを展開する方法
  1. 推奨される任意の場所に Java SDK パッケージをインストールします。
  2. 環境変数 FEDSDKROOT を Java SDK のインストール ディレクトリに設定します。
    注:
    FEDSDKROOT 環境変数の値は SDK ディレクトリを指しています。例: C:\Program Files\CA\FederationManager\sdk この環境変数は、Windows 上で自動的に設定されますが、UNIX プラットフォーム上では手動でエクスポートする必要があります。
  3. Tomcat 5.0 をインストールし、TOMCAT_HOME 環境変数を Tomcat ルート フォルダを指すよう設定します。
    注:
    Tomcat は、フェデレーション システムがインストールされているシステムとは別のシステムにインストールされる必要があります。
  4. FEDSDKROOT\sample\javasdk\war を
    TOMCAT_HOME
    \webapps\ フォルダにコピーすることにより、Web サーバにそれを展開します。
  5. Tomcat サーバを起動します。
  6. Tomcat が起動され稼働中かどうか判断するために、リンク「http://
    fqdn_of_Tomcat_host
    :
    port_number
    /」へのアクセスを試行します。
  7. オープン形式の Cookie を使用する場合は、
    fedsample.properties
    ファイルを更新します。このファイルは、ディレクトリ
    TOMCAT_HOME
    \webapps\javasdk\WEB-INF\classes にあります。ファイルに以下の更新を加えます。値の多くは、管理 UI を使用してパートナーシップに対して設定した値に一致する必要があります。
    • オープン形式の Cookie に対して、[RedirectMode]プロパティを
      [OPEN]
      に設定します。
    • [CookieDomain]プロパティを、フェデレーション パートナーシップで設定される Cookie ドメインの値に設定します。
    • [CookieName]プロパティを、フェデレーション パートナーシップで設定される Cookie 名の値に設定します。
    • [CryptoInstance]プロパティを、フェデレーション パートナーシップで指定される暗号化変換に設定します。
    • フェデレーション パートナーシップの[HMAC の有効化]チェック ボックスが選択されているかどうかに一致するように、[UseHmac]プロパティを設定します。チェック ボックスがオフの場合は、このプロパティを
      [no]
      に設定します。チェック ボックスが選択されている場合は、このプロパティを[yes]に設定します。
    • [ShowAttributeMap]プロパティは、アサーション マップ内のデータが表示されるかどうかを指定します。アサーション マップ内のデータが表示されない場合は[no]、アサーション マップ内のデータがすべて表示される場合は[yes]を指定します。この値は、フェデレーション パートナーシップで設定された値に一致する必要があります。値を[no]に設定した場合、SpSideAttributeKey パラメータに記載された属性のリストのみが表示されます。 SpSideAttributeKey は、その属性または表示される要求からの属性(カンマ区切り)を指定します。 CharsetEncoding は、画面上に表示されるレスポンスの charset エンコーディングを指定します。
  8.  ライト ウェイト プロビジョニングをテストする場合は、以下のパラメータを更新します。
    • EnableProvisioningTest - ライト ウェイト プロビジョニングが有効かどうかを指定します。プロビジョニングが有効でない場合は、値を
      [no]
      に設定します。そうでない場合は、値を
      [yes]
      に設定して、ライト ウェイト プロビジョニングを有効にします。
    • [AssertionConsumerUrl]プロパティのアサーション コンシューマ URL を指定します。
    • [UDType]プロパティで、ユーザ ディレクトリのタイプを指定します。使用するディレクトリに応じて、「odbc」または「ldap」を入力します。また、ディレクトリに関連付けられた接続パラメータを指定します。
フェデレーション システムのログ記録を有効にするには、
sdkloggingconfig.properties
ファイルを更新します。ロギングは、デフォルトでは無効になっています。
sdkloggingconfig.properties ファイルで、以下のプロパティを設定します。
  1. 適切なリダイレクト モードを選択します。
  2. パートナーシップのターゲット URL を指定します。以下の
    いずれか
    の URL を入力します。
    • SDK サンプル アプリケーションの URL (たとえば http://
      fqdn_of_target_machine
      :
      Tomcat_port
      /javasdk/SpSideAttributeServlet)。
    • 依存パーティの前に存在する、セキュア プロキシの URL、http://
      fqdn_of_the_secure_proxy
      セキュア プロキシの場合、proxyrules.xml ファイル内のターゲット マシンのエントリも更新します。ディレクトリ %FEDROOT%\ proxy-engine\conf\proxyrules.xml で、このファイルを検索します。ターゲット マシンの以下の URL を指定します。http://
      fqdn_of_target_machine
      :
      Tomcat_port
      /javasdk/SpSideAttributeServlet。
これでサンプル アプリケーションが展開され、実行する準備ができました。
Java SDK サンプル アプリケーションの実行
Tomcat および Federation Manager をインストールした後、Java SDK サンプル アプリケーションを実行できます。
Java SDK サンプル アプリケーションを実行する方法
  1. サンプル アプリケーションが展開する Tomcat サーバを開始します。
    • Windows では、サービス コントロール パネルを使用します。
    • UNIX では、Tomcat の起動スクリプトを使用します。
  2. 設定された連係トランザクションを実行して、SDK サンプル アプリケーションにリダイレクトします。
    サンプル アプリケーションは Cookie をデコードし、ユーザ識別情報を表示します。
Java SDK サンプル アプリケーションのカスタマイズ
サンプル アプリケーションは、fedsdksample.jar を再生成するために build.bat または build.sh スクリプトを使用して変更できます。
サンプル Java アプリケーションをカスタマイズする方法
  1. SpSideServlet または SpSideAttributeServlet.java を必要に応じて変更します。
  2. JDK がインストールされ、JAVA_HOME が JDK インストールに対して適切に設定されていることを確認します。
  3. fedsdksample.jar ファイルを構築するために build.bat (Windows)または build.sh (UNIX)を実行します。
サンプル アプリケーションのカスタマイズされたバージョンを実行する準備ができました。
SAML アサーションのカスタマイズ
企業は、連係されたパートナー間のビジネス契約に基づいてアサーションのコンテンツを変更できます。たとえば、あるパートナーは、アサーションで属性に対する使いやすい名前相当物を要求することができます。または、あるパートナーは、アサーションに各属性の XML タイプ指定を含めるよう選ぶことができます。
フェデレーション システムは、AssertionGeneratorPlugin.java インターフェースの実装で SAML アサーションを作成します。アプリケーション開発者は、既存の実装クラスを上書きすることで SAML アサーションのコンテンツを増強できます。
以下の図は、カスタム アサーション ジェネレータ プラグインを作成する過程を示します。
federation assertion generator plugin
SAML アサーションをカスタマイズする過程にはこれらの手順が含まれます。
  1. 新しいアサーション ジェネレータ プラグインを展開します。
  2. Federation Manager UI でアサーション ジェネレータ プラグインを設定します。
Java アサーション ジェネレータ プラグイン インターフェースの実装
AssertionGeneratorPlugin.java インターフェースを実装することでカスタム アサーション ジェネレータ プラグインを作成します。実装クラスに関する最小要件を以下に記載します。
以下の手順に従います。
  1. パラメータが含まれない公のデフォルト コンストラクタ メソッドを提供します。
  2. 実装がステートレスであることを確実にするのに役立つコードを提供します。その結果、多くのスレッドが単一のプラグイン クラスを使用できます。
  3. customizeAssertion メソッドへのコールを含めます。
    この例では、アプリケーション開発者が使いやすい名前属性を作成するために handler.updateNameID を定義していると仮定します。
    /**
         * <p>Performs Assertion Generator callout functionality to customize the
         * SAML assertion in the <code>AssertionGeneratorPlugin</code> object and
         * returns a result.</p>
         * @param apiContext     A context object that provides methods for sending
         *                       log, trace, and error messages to the Policy Server. Use the APIContext.getAttrMap() method to retrieve attributes posted by the application specified in the Application URL.
         * @param userContext    A context object that allows a custom object to set
         *                       and retrieve information about a user in a user
         *                       directory. The information includes user
         *                       attributes and directory attributes associated
         *                       with the user.
         * @param pluginParam    The string for Assertion plug-in parameters. 
         * @param inputAssertion    The current XML token representing the SAML Assertion.
         * @param outputAssertion   The final XML token representing the SAML Assertion.
         * @return  0 if assertion is customized successfully, or -1 if no customization or an error occurred.
         * If the method fails, the outputAssertion is ignored.
         * @throws java.lang.Exception For cases when the customization terminates unexpectedly.
         *
         **/
        public int customizeAssertion(APIContext apiContext, UserContext userContext,String pluginParam,
         String inputAssertion, final StringBuffer outputAssertion) throws Exception {
            if (inputAssertion == null || inputAssertion.equals("")) {
                // Indicates non-zero for an error.
                apiContext.trace(PLUGIN_TAG, "Received null or empty response for customization");
                return -1;
            }
            apiContext.trace(PLUGIN_TAG, "Entering customizeAssertion");
            StringBuffer newAssertion = new StringBuffer(inputAssertion);
     
            try
            {
                Saml1AssertionHandler handler =
                    initHandler(apiContext, userContext);
                handler.updateNameID(newAssertion);
                handler.addAttributes(pluginParam, newAssertion);
            }
            catch(Throwable th)
            {
                apiContext.error("SAML1AssertionSample: " + th.getMessage());
                StringWriter writer = new StringWriter();
                th.printStackTrace(new PrintWriter(writer));
                writer.flush();
                apiContext.trace(PLUGIN_TAG,
                                 "Error customizing Assertion:\n" + writer.toString());
     
                apiContext.trace(PLUGIN_TAG, "Done customizeAssertion");
                return -1;
            }
     
            outputAssertion.append(newAssertion);
     
            apiContext.trace(PLUGIN_TAG, "Done customizeAssertion");
     
            // return "success"
            return 0;
        }
    : 構文要件および customizeAssertion メソッドへ渡されるパラメータ文字列の使用は、カスタム オブジェクトの責任です。
アサーション ジェネレータ プラグインの展開
AssertionGeneratoPlugin.java インターフェース用の実装クラスをコード化した後、それをコンパイルし、
Single Sign-On
が実行可能ファイルを検索できることを確認します。
以下の手順に従います。
  1. 以下のいずれかの方法でアサーション ジェネレータ プラグイン コードをコンパイルします。
    • サンプル プラグインを使用している場合は、ビルド スクリプトを使用してプラグインをコンパイルします。ビルド スクリプトは、ディレクトリ
      federation_sdk_home
      \sample にインストールされます。ビルド スクリプトは次のとおりです。
      Windows:
      build_plugin.bat
      UNIX:
      build_plugin.sh
      コンパイルされたサンプル プラグイン、fedpluginsample.jar は、ディレクトリ
      federation_sdk_home
      \jar にあります。
    • 自分のプラグインを書き込む場合は、プラグインをコンパイルするときに smapi.jar をインクルードします。
  2. JVMOptions.txt ファイルで、プラグインのクラスパスをインクルードするように、-Djava.class.path 値を変更します。ディレクトリ
    federation_home
    \siteminder\config に JVMOptions.txt ファイルを置きます。
    任意のディレクトリにプラグイン jar を配置し、JVMOptions.txt ファイルがそれを参照するよう設定できます。サンプル プラグインを使用するには、fedpluginsample.jar を参照するようクラスパスを変更しますが、smapi.jar 用のクラスパスは変更しないでください。
    注:
    プラグインで Apache Xerces または Xalan を使用するには、
    Single Sign-On
    と共にインストールされた Xerces または Xalan のバイナリ ファイルを使用します。これらのバイナリは Federation Manager SDK ではインストールされません。互換性の理由でこれらのファイルを使用する必要があります。
UI 内のアサーション ジェネレータ プラグインの設定
アサーション ジェネレータ プラグインを設定するには、管理 UI で設定に対して値を指定します。
: プラグインを展開するまで、プラグイン設定を行わないでください。
以下の手順に従います。
  1. 管理 UI にログオンします。
  2. 変更するパートナーシップのパートナーシップ ウィザードのアサーション設定手順に移動します。
  3. 次のフィールドに値を入力します。
    • プラグイン クラス
      プラグインの Java クラス名を指定します。名前を入力します。このプラグインはランタイムで呼び出されます。
      例: com.mycompany.assertiongenerator.AssertionSample
      プラグイン クラスは、アサーションの解析および変更を行った後、最終的な処理のために結果を
      Single Sign-On
      に返します。各依存パーティのアサーション ジェネレータ プラグインを指定します。コンパイルされたサンプル プラグインは、ディレクトリ
      federation_sdk_home
      /jar に含まれています。
    • プラグイン パラメータ
      (オプション)。
      Single Sign-On
      がランタイムでパラメータとしてプラグインへ渡す文字列を指定します。文字列にはあらゆる値を含めることができ、従う特定の構文はありません。
      プラグインは、受信するパラメータを解釈します。たとえば、パラメータは属性の名前です。または、文字列には、何かを実行するようにプラグインに命令する整数を含めることができます。
アサーション ジェネレータ プラグインは、コード化およびコンパイルされ、配置済みです。アサーション ジェネレータは、フェデレーション パートナーによって定義された、強化されたアサーションを作成します。