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リファレンス