Oracle® Fusion Middleware Oracle Access Management開発者ガイド 11gリリース2 (11.1.2.3.0) for All Platforms E67354-04 |
|
![]() 前 |
![]() 次 |
プラグインを開発することにより、サード・パーティまたはカスタムのSAML実装によってよく要求されるカスタムの要素と属性を含むSAMLメッセージを、Oracle Access Management Identity Federationが処理できるようにできます。実際には、OIFMessageProcessingPlugin
の機能を拡張することになります。
この章には、次の項があります。
SAMLは拡張可能なプロトコルなので、必要に応じてカスタムの要素と属性をSAMLメッセージに挿入できます。サード・パーティまたはカスタムのSAML実装が機能するには、これらの特定のカスタム要素または属性が必要になることがあります。たとえば、アイデンティティ・プロバイダ(IdP)では、メッセージのSAML拡張部分に含まれるカスタム<CompanyInfo>
要素がSAMLリクエストを発行して会社の名前を提供することが必要な場合があります。Oracle Access Management Identity Federation(Identity Federation )は、OIFMessageProcessingPlugin
は、これらのカスタム要素を処理するように変更できます。
注意: Oracle Access Management環境に可能なのは1つのプラグインだけですが、プラグインで条件文ロジックを使用して、異なるメッセージに対して異なる結果をもたらすことができます。 |
OIFMessageProcessingPlugin
コードを拡張するには、次の手順に従います。
ディレクトリを作成します。
このチュートリアルでは、それをplugindev
と呼びます。
次のサブディレクトリを作成します。
plugindev/src/msgprocplugin
例19-1の内容を使用して、SampleMsgProcPlugin.java
を作成します。
Oracle Access Managementは標準JDK XMLクラスをOracle固有のもので上書きし、Class.forNameを使用してSystem Class LoaderからDOMファクトリ・オブジェクトを直接取得できるようにします。
例19-1 SampleMsgProcPlugin.java
package msgprocplugin; import java.io.*; import java.util.*; import javax.xml.parsers.*; import oracle.security.am.plugin.*; import oracle.security.fed.plugins.fed.msgprocessing.*; import org.w3c.dom.*; import org.w3c.dom.ls.*; import org.xml.sax.*; import static java.lang.System.err; public class SampleMsgProcPlugin extends OIFMessageProcessingPlugin { private boolean monitoringStatus; public ExecutionStatus process(MessageContext messageCtx) throws MessageProcessingException { try { String msg = ""; msg += "************************************\n"; msg += "* SAMPLE MESSAGE PROCESSING PLUGIN *\n"; msg += "************************************\n"; msg += "Partner Name: " + messageCtx.getPartnerName() + "\n"; msg += "Message Type: " + messageCtx.getMessageType() + "\n"; msg += "Message Version: " + messageCtx.getMessageVersion() + "\n"; msg += "User DN: " + messageCtx.getUserDN() + "\n"; msg += "User ID: " + messageCtx.getUserID() + "\n"; msg += "User ID Store: " + messageCtx.getUserIDStore() + "\n"; // Determine if this message meets our criteria for modification boolean matches = "LoopbackIDP".equals("" + messageCtx.getPartnerName()) && "SSO_AUTHN_REQUEST_OUTGOING".equals("" + messageCtx.getMessageType()) && "SAML2.0".equals("" + messageCtx.getMessageVersion()); if (!matches) msg += "@@@@@@ CRITERIA NOT MET - SKIPPING THIS MESSAGE @@@@@@\n"; else { // your business logic here } msg += "=================ENDS===================\n"; err.println(msg); return ExecutionStatus.SUCCESS; } catch (Exception e) { e.printStackTrace(); throw handle(e); } } @Override public String getDescription(){ return "Sample Message Processing Plugin"; } @Override public Map<String, MonitoringData> getMonitoringData(){ return null; } @Override public boolean getMonitoringStatus(){ return monitoringStatus; } @Override public String getPluginName(){ return "SampleMsgProcPlugin"; } @Override public int getRevision() { return 123; } @Override public void setMonitoringStatus(boolean status){ this.monitoringStatus = status; } }
SampleMsgProcPlugin.java
をplugindev/src/msgprocplugin
ディレクトリに配置します。
例19-2の内容を使用して、SampleMsgProcPlugin.xml
プラグイン・マニフェストを作成します。
この手順でプラグインの構成設定を定義しても、後からOracle Access管理コンソールを使用して変更できます。
例19-2 SampleMsgProcPlugin.xml
<?xml version="1.0"?> <Plugin type="Message Processing"> <author>John Doe</author> <email>donotreply@example.com</email> <creationDate>2015-04-16 12:53:37</creationDate> <description>Sample Message Processing Plugin</description> <configuration> </configuration> </Plugin>
SampleMsgProcPlugin.xml
をplugindev/
ディレクトリに配置します
例19-3の内容を使用してMANIFEST.MFファイルを作成します。
これは、OSGiバンドル・メタデータを表します。プラグインが必要とするJavaパッケージがリストされます。
注意: Import-Packageはすべて1行ですので注意してください。 |
例19-3 MANIFEST.MF
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: SampleMsgProcPlugin Bundle-SymbolicName: SampleMsgProcPlugin Bundle-Version: 1 Bundle-Activator: oracle.ateam.msgprocplugin.SampleMsgProcPlugin Import-Package: javax.xml.parsers,oracle.security.am.plugin,oracle.security.fed.plugins.fed.msgprocessing,org.osgi.framework;version="1.3.0",org.w3c.dom,org.w3c.dom.ls,org.xml.sax Bundle-RequiredExecutionEnvironment: JavaSE-1.6
MANIFEST.MF
をplugindev/
ディレクトリに配置します
例19-4の内容を使用してcompile.sh
シェル・スクリプトを作成します。
このシェル・スクリプトは、プラグインをコンパイルします。別のオプションは、ANTまたはMavenの使用です。パスDOMAIN_HOMEとSERVER_NAMEは、環境により変更する必要があります。また、JARS=はすべて1行ですので注意してください。
注意: JARS=はすべて1行ですので注意してください。 |
例19-4 compile.sh
#!/bin/bash DOMAIN_HOME=/idmtop/config/domains/IAMAccessDomain SERVER_NAME=wls_oam1 JARS="$(find $DOMAIN_HOME/servers/$SERVER_NAME/tmp/_WL_user/oam_server_11.1.2.0.0/ -name fed.jar -o -name oam-plugin.jar -o -name felix.jar | tr '\n' ':' | sed -e 's/:$//')" SRCS="$(find src -name '*.java')" rm -rf build mkdir build javac -d build -classpath $JARS $SRCS cp SampleMsgProcPlugin.xml build mkdir build/META-INF cp MANIFEST.MF build/META-INF cd build jar cvmf META-INF/MANIFEST.MF ../SampleMsgProcPlugin.jar *
compile.sh
をplugindev/
ディレクトリに配置します
compile.shを実行してSampleMsgProcPlugin.jarを作成します。
この手順を使用して、SampleMsgProcPlugin.jar
をインポートし、アクティブ化します。
管理者としてOracle Access Managementコンソールにログインします。
コンソール最上部の「アプリケーション・セキュリティ」をクリックします。
「プラグイン」セクションの下の「認証プラグイン」をクリックします。
「認証プラグイン」画面は、すべてのOracle Access Managementプラグインを構成するために使用されます。
「プラグインのインポート」をクリックします。
「プラグインのインポート」画面が表示されます。
「参照」をクリックし、「OIFMessageProcessingPluginの拡張」で作成したSampleMsgProcPlugin.jar
を検索します。
「インポート」をクリックしてJARをアップロードします。
表をリフレッシュし、今インポートしたプラグインを検索します。
「選択項目の配布」をクリックします。
「リフレッシュ」アイコンをクリックして、ステータスが「配布済」に変わったことを確認します。
「選択項目のアクティブ化」をクリックします。
「リフレッシュ」アイコンをクリックして、ステータスが「アクティブ化済」に変わったことを確認します。
これでプラグインがインストールされ、アクティブ化されました。
この手順を使用して、SampleMsgProcPlugin.jar
が使用できる状態であることをIdentity Federationに知らせます。
ファイル$DOMAIN_HOME/config/fmwconfig/oam-config.xml
をテキスト・エディタで開きます。
fedserverconfig
タグの名前が付けられた設定の下で定義されている、messageprocessingeplugin
タグの名前が付けられた設定を見つけます。
messageprocessingeplugin
の値を、プラグインの名前に変更します。
fedserverconfig
タグの名前が付けられた設定の下で定義されている、messageprocessingenabled
タグの名前が付けられた設定を見つけます。
messageprocessingenabled
の値を、falseからtrueに変更します。
Version
という名前の設定を見つけ(ファイルの上の方)、バージョン番号をインクリメントします。
oam-config.xml
ファイルが変更されたら毎回これを実行します。
ファイルを保存します。
同じディレクトリにあるoam-config.ref
ファイルのバージョン番号が新しいバージョン番号に増やされていれば、変更が読み込まれています。