Oracle Identity Federationは、サーバーによって実行される操作のビジネス処理をカスタマイズするためのプラグイン・フレームワークを提供します。この章では、プラグイン機能について説明し、例を紹介します。
この項では、プラグイン・フレームワークのいくつかの要点について説明します。
プロセス・フローは次のようになります。
ビジネス・フローの様々なセクションで呼び出されるプラグインを実装します。
プラグインでは、操作の実行中に収集されたデータを分析し、追加のビジネス・ステップが必要かどうかを判断できます。
追加のアクションを実行すべき場合は、プラグインはユーザーのリダイレクト先のURLをOracle Identity Federationに返します。
リダイレクションURLには、プラグインによって設定された問合せ文字列パラメータを含めることができます。
Oracle Identity FederationはrefID
によって参照される1つの問合せ文字列パラメータを追加します。これは、ユーザーがOracle Identity Federationに戻される際に送信されます。
追加の操作が実行された場合、ユーザーはrefid
パラメータとともに次のURLでOracle Identity Federationにリダイレクトされる必要があります。
http(s)://OIF-HOST:OIF-PORT/fed/user?refid=VALUE_RETRIEVED_FROM_REDIRECT_URL
ビジネス・プラグインを実装するために必要な作業は次のとおりです。
プラグインの構築
第11.1.3項「プラグインの構築、操作およびパラメータ」を参照してください。
Oracle Identity Federation構成ファイルへのプラグインの登録
第11.2項「ビジネス処理プラグインの構成」を参照してください。
プラグインのJARファイルへのパッケージ化、およびJARファイルのCLASSPATHへの追加
第11.3項「プラグインのパッケージ化」を参照してください。
JavaEEセキュリティの設定
第11.4項「JavaEEセキュリティの構成」を参照してください。
Oracle WebLogic Serverを再起動します。
プラグインの構築
プラグインはoracle.security.fed.plugins.bizops.OperationListener
インタフェースを拡張し、public ListenerResult process(int operationType, OperationData params)
メソッドを実装する必要があります。
このメソッドには2つの引数があります。1つ目には実行される操作のタイプを、2つ目にはこの操作に関連するパラメータを指定します。このパラメータはプラグインが判断する際に使用します。メソッドは、ステータスおよびオプションのredirectURL
を含むListenerResult
クラスを返します。ステータスがOKの場合、Oracle Identity Federationは操作を再開します。OKではない場合は、指定されたリダイレクションURLにユーザーをリダイレクトします。
操作
次の操作があります。
OperationTypes.BUSINESS_IDP_CREATE_PERSISTENT_FEDERATION: IdP側に永続フェデレーションが作成されることを示します。
OperationTypes.BUSINESS_IDP_CREATE_TRANSIENT_FEDERATION: IdP側に一時フェデレーションが作成されることを示します。
OperationTypes.BUSINESS_IDP_SSO: IdP側でSSO処理が実行されることを示します。
渡されるパラメータ
OperationData
オブジェクトで渡されるパラメータは次のとおりです。
BusinessProcessingConstants.DATA_STRING_PROVIDERID: サービス・プロバイダIDを参照します。タイプはString
です
BusinessProcessingConstants.DATA_STRING_USERID: ユーザーIDを参照します。タイプはString
です。
BusinessProcessingConstants.DATA_STRING_SESSIONID: セッションIDを参照します。タイプはString
です。
BusinessProcessingConstants.DATA_STRING_NAMEID_FORMAT: 作成されているフェデレーションの名前IDフォーマットを参照します。タイプはString
です。
BusinessProcessingConstants.DATA_STRING_PROTOCOL_VERSION: 実行されるプロトコルを参照します。タイプはString
です。
BusinessProcessingConstants.DATA_BOOLEAN_AUTHNREQUEST_ISPASSIVE: AuthnRequest
からのIsPassive
フィールドを参照します。タイプはBoolean
です
ListenerResult
クラスの戻りステータス値は次のとおりです。
BusinessProcessingConstants.STATUS_OK: プラグインには特定のアクションは必要ないことを示します。
BusinessProcessingConstants.STATUS_REDIRECT: プラグインはユーザーをURLにリダイレクトする必要があることを示します。
Oracle Identity Federation構成ファイルにプラグインを追加するには、次の手順を実行します。
$DOMAIN_HOME/config/fmwconfig/servers/wls_oif1/applications/OIF_11.1.1.2.0/configuration/config.xml
ファイルを開きます。
属性名がserverconfig
であるConfig
XML要素を見つけます。
属性名がbusinessprocessingplugins
であるPropertiesList
XML要素を見つけます。
Property
XML子要素をPropertiesList
に追加します。Property
要素のテキスト子要素はプラグインのクラス名にし、この要素のタイプ属性はstring
にする必要があります。
保存して終了します。
構成ファイルの例を次に示します。
<FederationConfig xmlns="http://xmlns.oracle.com/fed/schema/oif-11_2.xsd" version="0" activationenabled="false"> <Config name="serverconfig"> ... <PropertiesList name="businessprocessingplugins"> <Property type="string">oracle.security.fed.plugins.BusinessProcessingSample</Property> </PropertiesList> ... </Config> ... </FederationConfig>
プラグインをパッケージ化するには、次の手順を実行します。
プラグインをjarファイルに追加します。
jarファイルをOracle WebLogic Serverのlib
ディレクトリにコピーします。
Oracle/Middleware/user_projects/domains/IDMDomain/lib
必要な他のjarファイルを同じディレクトリにコピーします。
oif.jar
をOracle/Middleware/Oracle_IDM1/fed/jlib/
からOracle/Middleware/user_projects/domains/IDMDomain/lib
にコピーします。
注意: パッチ・セットを適用するたびに、この手順を繰り返します。 |
commons-httpclient-3.1.jar
を同じディレクトリにコピーします。
commons-codec-1.2.jar
を同じディレクトリにコピーします。
環境構成の詳細は、『Oracle Fusion Middleware管理者ガイド』の環境変数の設定に関する項を参照してください。
次の場所にあるWebLogicポリシー・ファイルを更新します。
Oracle/Middleware/wlserver_10.3/server/lib/weblogic.policy
このファイルに次の行を追加します。
grant codeBase "file:${user.domain}/lib/-" { permission java.security.AllPermission; }; grant codeBase "file:/home/oracle/Oracle/Middleware/user_projects/domains/IDMDomain/lib/-" { permission java.security.AllPermission; };
サンプル・プラグインは、次のようになります。
package oracle.security.fed.plugins; import java.net.URLEncoder; import java.util.Set; import java.util.HashSet; import oracle.security.fed.plugins.bizops.BusinessProcessingConstants; import oracle.security.fed.plugins.bizops.BusinessProcessingException; import oracle.security.fed.plugins.bizops.ListenerResult; import oracle.security.fed.plugins.bizops.OperationData; import oracle.security.fed.plugins.bizops.OperationListener; import oracle.security.fed.plugins.bizops.OperationTypes; // in this example, the plug-in will redirect the user to an external page the first time a user // creates a persistent federation. Later on, if the user creates another federation (with the same // provider or another one), the plug-in will not redirect the user anymore. // Note: restarting the server will wipe out the cached information from the plug-in, resetting the data // indicating whether or not any user was already redirected to the external page. public class BusinessProcessingSample implements OperationListener { private Set licenseAgreements = new HashSet(); public ListenerResult process(int operationType, OperationData params) throws BusinessProcessingException { ListenerResult result = new ListenerResult(BusinessProcessingConstants.STATUS_OK); switch(operationType) { case OperationTypes.BUSINESS_IDP_CREATE_PERSISTENT_FEDERATION: String userid = params.getStringProperty(BusinessProcessingConstants.DATA_STRING_USERID); if (!licenseAgreements.contains(userid)) { // redirect to remote page result.setStatus(BusinessProcessingConstants.STATUS_REDIRECT); StringBuffer sb = new StringBuffer(); sb.append("http://WEB-SERVER-HOST:WEB-SERVER-PORT/businesstest.jsp?providerid="); sb.append(URLEncoder.encode(params.getStringProperty(BusinessProcessingConstants.DATA_STRING_PROVIDERID))); sb.append("&userid="); sb.append(URLEncoder.encode(params.getStringProperty(BusinessProcessingConstants.DATA_STRING_USERID))); result.setRedirectURL(sb.toString()); // add the user to the license agreement set licenseAgreements.add(userid); } break; } return result; } }
次に、サンプル・リダイレクト・ページを示します。
<%@ page language="java" import="java.net.*"%> <% // Set the Expires and Cache Control Headers response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "Thu, 29 Oct 1969 17:04:19 GMT"); String providerid = request.getParameter("providerid"); String userid = request.getParameter("userid"); String refid = request.getParameter("refid"); String returnurl = "http://OIF-HOST:OIF-PORT/fed/user?refid=" + URLEncoder.encode(refid); %> <html> <body> License Agreeement approved for: ProviderID = <%=providerid%> <BR> UserID = <%=userid%> <BR> <a href="<%=returnurl%>">Click here to resume flow</a> </body> </html>
ビジネス処理プラグインAPI(javadoc)は次のページから入手できます。
Oracle Fusion Middleware Oracle Identity Federationビジネス処理プラグインJava APIリファレンス