15 プラグインの開発
この章では、プラグインに関連する概念、プラグインを開発および使用する方法について説明します。次の項目が含まれます。
15.1 プラグインおよびプラグイン・ポイント
ビジネス・ロジックにはプラグイン・ポイントと呼ばれる特定のポイントがあり、そこではプラグインを利用して拡張性を提供できます。
プラグインに関連する概念は、次の項で説明されています。
15.1.1 プラグインおよびプラグイン・ポイントについて
プラグイン・フレームワークにより、各機能によって提供される機能性を拡張するプラグインを定義、登録および構成できます。プラグインは、事前定義またはカスタム開発でき、プラグイン・ポイントで使用できます。
プラグインは、Oracle Identity Managerによって提供される機能の機能性を拡張する論理的なコンポーネントです。プラグイン・フレームワークにより、各機能によって提供される機能性を拡張するプラグインを定義、登録および構成できます。プラグインは、事前定義またはカスタム開発でき、プラグイン・ポイントで使用できます。プラグイン・ポイントは、拡張性を追加できる、ビジネス・ロジック内の特定のポイントです。そのようなポイントには、プラグイン・インタフェースと呼ばれるインタフェース定義が付随しています。ビジネス要件に基づいてプラグイン・インタフェースを拡張し、プラグインとして登録できます。これを行うには、プラグインJavaクラスを開発し、JARファイルへのアーカイブ、XMLファイルでのプラグイン・メタデータの定義およびデプロイの準備ができたプラグイン・パッケージとしてのこれらのアーティファクトの圧縮を行う前にコンパイルします。
たとえば、ユーザーの作成は、Oracle Identity Managerのビジネス操作です。ただし、この操作はユーザー名の生成のプラグイン・ポイントを公開します。ユーザー名生成のカスタム・ロジックをモデル化する場合、プラグイン・ポイントの仕様を識別し、プラグインを適宜開発する必要があります。
15.1.2 プラグインおよびイベント・ハンドラ
ユーザー作成、ユーザーへのロールの割当て、ユーザーのアクティブ化などOracle Identity Managerのビジネス操作のほとんどは、編成として実行されます。
そのため、これらの操作または編成のカスタム・ロジックに起因する要件がある場合、カスタマイズがサポートされている検証、前処理および後処理などのステージのイベント・ハンドラとしてそのロジックをモデル化できます。ただし、そのような操作でカスタム・ロジックに起因するプラグイン・ポイントを公開するかどうかも分析できます。プラグイン・ポイントが使用可能な場合、基礎となる編成を操作するのではなく、プラグイン・ポイントを利用できます。たとえば、ユーザー作成編成でイベント・ハンドラとして記述せずに、公開されたプラグインを使用することで、ユーザー名生成を実装することができます。
図15-1は、プラグインおよびイベント・ハンドラをダイアグラムで表しています。
15.1.3 プラグイン・ストア
プラグイン・フレームワークでは、プラグイン・ストアにプラグインを格納します。
この項では、プラグイン・ストアとのストアのタイプについて説明します。内容は次のとおりです。
15.1.3.1 プラグイン・ストアについて
プラグイン・フレームワークでは、次の2つのタイプのストアにプラグインを格納できます。
-
ファイル・システム。詳細は、ファイル・ストアを参照してください。
-
Oracle Identity Managerデータベース詳細は、データベース・ストアを参照してください。
プラグインを検索する場合は、フレームワークによって、データベースに登録されているプラグインが最初に調べられてから、ファイル・システムが調べられます。
15.1.3.2 ファイル・ストア
ファイル・ストアは、Oracle Identity Managerホスト上の1つ以上のディレクトリで構成されており、主に開発環境で使用されます。このタイプのストアは、本番環境には適していません。ファイル記憶域は、開発したプラグインをファイル・ストアに明示的に登録する必要がないため、開発者にとって便利です。ユーザーは、プラグインzipまたは展開されたプラグイン・ディレクトリを指定の場所にドロップインするだけです。
デフォルトでは、プラグインはプラグイン・フレームワークによってOIM_HOME/plugins
ディレクトリで検索されます。プラグイン・ディレクトリを追加指定することもできます。
監視スレッドが有効な場合は、プラグイン・フレームワークによって、ファイル・システム内の登録済プラグイン・ディレクトリでプラグインzipファイルのすべての追加、変更および削除が監視され、プラグインは自動的にリロードされます。名前、バージョン、IDなどのプラグイン・メタデータがプラグインzipから読み取られ、メモリー内で維持されます。このメタデータは、ファイルの変更に基づいて更新されます。最新のプラグインzipファイルが、現行バージョンのプラグインとみなされます。ファイル・ストアの構成方法の詳細は、プラグインの構成を参照してください。
ノート:
本番状態のファイル・ストアを使用することは推奨されていません。ファイル・ストアは、プラグインの変更が簡単で、ファイル・システムのファイルのみを変更するため、プラグインの開発に適しています。登録する必要はありません。ただし、本番では、プラグインは頻繁に変更されず、特定のデメリットがあるため、ファイル・ストアの使用は避けてください。ファイル・ストアの監視のオーバーヘッドを追加します。また、プラグインは、Oracle Identity Managerのクラスタ化されたデプロイメントのクラスタのすべてのノードでレプリケートする必要があります。
15.1.3.3 データベース・ストア
プラグインはOracle Identity Managerデータベースに格納できるため、クラスタ内の任意のノードからアクセスできます。プラグイン・フレームワークでは、データベース・ストアとして業務系DBが使用されます。このタイプのストアは、本番環境に適しています。
データベースに格納されるプラグインは、明示的に登録する必要があります。コマンド行ツールであるプラグイン登録ユーティリティを使用して、プラグインを登録および登録解除できます。また、registerPlugin
APIをこの用途に使用することもできます。プラグインの登録の詳細は、APIを使用したプラグインの登録および登録解除を参照してください。
ノート:
プラグインを登録した後で、サーバーを再起動する必要があります。ただし、サーバーの再起動は、プラグイン・ポイントを定義する機能に依存する場合もあります。
15.2 デプロイメントでのプラグインの使用
プラグインは、Oracle Identity Managerデプロイメントのデフォルト機能のカスタマイズに使用されます。
サポートされるプラグイン・ポイントの数は、定義済で、制限されています。そのため、プラグイン・ポイントを使用して、サポートされるプラグイン・ポイントのリストに関してのみ、機能を拡張することができます。サポートされるプラグイン・ポイントのリストは、プラグイン・ポイントを参照してください。
15.3 プラグイン・ポイント
Javaインタフェースは、プラグイン・ポイントとして機能します。
表15-1に、Oracle Identity Managerでプラグイン・ポイントとして機能するJavaインタフェースを示します。
表15-1 プラグイン・ポイント
プラグイン・ポイント | 説明 |
---|---|
oracle.iam.ldapsync.LDAPContainerMapper |
これは、LDAPでユーザーまたはロールを作成するために使用する必要があるユーザー・コンテナまたはロール・コンテナを決定するために、LDAP同期によって使用されます。 |
oracle.iam.platform.kernel.spi.EventHandler |
これは、カーネル・イベント・ハンドラです。カーネル・イベント・ハンドラの詳細は、イベント・ハンドラの開発を参照してください。 |
oracle.iam.platform.auth.api.LoginMapper |
これは、JAASユーザー・プリンシパル名を対応するOracle Identity Managerユーザー名にマップするLoginMapperの実装です。このプラグイン・ポイントは、SSOシナリオのJAASユーザー・プリンシパル名からOracle Identity Managerユーザー名へのデフォルトのマッピングをオーバーライドするために使用されます。デフォルトの実装では、JAASユーザー・プリンシパル名と同じ値が返されます。このプラグイン・ポイントは、通常、JAASユーザー・プリンシパル名とOracle Identity Managerユーザー名が異なる場合があるSSOシナリオで使用されます。たとえば、SSOシステムで電子メールがJAASユーザー名として設定される場合がありますが、そのユーザー名を持つユーザーはOracle Identity Managerには存在しません。Oracle Identity Managerでそのユーザーが認識されるには、JAASユーザー・プリンシパル名をOracle Identity Managerユーザー名にマップする必要があります。これを実行するには、次に示すように、LoginMapperのプラグインを実装します。 public class CustomLoginMapper implements LoginMapper{ public String getOIMUserID(String jaasPrincipal) throws MappingException { return getUserName(jassPrincipal); } private String getUserName(String emailID){ String userName = null; //Use usermgmt APIs to get the username corresponding to this email id return userName; } } |
oracle.iam.identity.usermgmt.api.PasswordVerifier |
これは、ユーザーのパスワード変更時に古いパスワードを検証するために使用されます。この検証に使用されるクラスは、OIM.OldPasswordValidatorシステム・プロパティで構成します。デフォルトでは、古いパスワードの検証にはコンテナ・ベースの認証を使用します。 |
oracle.iam.request.plugins.StatusChangeEvent |
これにより、リクエスト・ステータス変更中にカスタム・コードを実行できます。 |
oracle.iam.request.plugins.RequestDataValidator |
これは、送信後のリクエスト・データのカスタム検証に使用されます。 |
oracle.iam.request.plugins.PrePopulationAdapter |
これは、リクエスト作成中にカスタム・コードを実行することで属性値を事前移入するために使用されます。 |
oracle.iam.scheduler.vo.TaskSupport |
これは、コンテキストでジョブを実行するために使用されます。タスクの実行メソッドがプラグインによって取得され、ロードされます。 |
oracle.iam.identity.usermgmt.api.UserNamePolicy |
これは、ユーザー名の生成および検証に使用されるユーザー名ポリシーの実装です。 |
oracle.iam.identity.usermgmt.api.ReservationInLDAP |
これは、LDAPでのユーザー属性の予約の実装です。 |
15.4 プラグインの構成
MDS内のoim-config.xmlファイルを使用してプラグインを構成します。
MDS内のoim-config.xmlファイルを使用して、次のものを構成します。
関連項目:
oim-config.xmlファイルの構成の詳細は、Oracle Identity Governanceの管理のoim-config.xmlファイルの構成を参照してください
-
ファイル・ストアによってプラグインが検索されるディレクトリ。
-
ファイル・ストアに変更があるかどうかを監視するスレッドをアクティブにするかどうか(このスレッドによって、すべてのプラグイン・ディレクトリ内のzipファイルまたは展開されたファイルが確認されます)。
監視スレッドは、動的開発環境ではプラグインが追加または変更されているため通常はアクティブ化されており、一連のプラグインが含まれている本番システムでは非アクティブにすることができます。これは、reloadingEnabled属性を使用して追跡できます。
-
監視スレッドがウェイクアップして変更を検索する間隔。
次に、oim-config.xml
ファイルのコード・スニペットを示します。
<pluginConfig storeType="common"> <storeConfig reloadingEnabled="true" reloadingInterval="20"> <!-- Plugins present in the OIM_HOME/plugins directory are added by default. For adding more plugins, specify the plugin directory as below: <registeredDirs>/scratch/oimplugins</registeredDirs> <registeredDirs>/scratch/custom</registeredDirs> --> </storeConfig> </pluginConfig>
この例の説明は、次のとおりです。
-
common
ストア指定によって、フレームワークはデータベースとファイル・ストアの両方を監視するように指定されます。ノート:
common
はすべての環境で適切であるため、Store
値は変更しないでください。 -
1つのディレクトリが構成されますが、<registeredDirs>タグを追加することによって追加ディレクトリを構成できます。
-
デフォルトで、監視スレッドがアクティブであり、プラグインの変更が20秒ごとに検索されます。
監視は、通常は開発環境のみでアクティブです。アクティブと非アクティブを切り替える場合は、アプリケーション・サーバーを再起動して変更を有効にする必要があります。
ノート:
oim-config.xmlファイルのプラグイン・データのあらゆる変更に、アプリケーション・サーバーの再起動が必要です。
15.5 カスタム・プラグインの開発
15.5.1 プラグインの開発
プラグインを開発するには、プラグイン・ポイントおよびJavaクラスを識別し、plugin.xmlファイルを構成し、プラグインで必要なリソース・ファイルを識別し、ファイル・ストアまたはデータベース・ストアにパッケージ全体を圧縮します。
プラグインを開発するには:
15.5.2 プラグインの宣言
Oracle Identity Managerで提供される機能を拡張するために、アプリケーションに対してプラグインを宣言できます。
プラグインには、プラグイン・ポイント・インタフェースを実装するJavaクラスがあります。特定のプラグイン・ポイントに関連付けられるすべてのプラグインに、一意の名前を割り当ててください。プラグイン名が一意でないと、プラグインの登録時に例外がスローされます。
プラグインをplugin.xml
ファイルで宣言します。たとえば:
<?xml version="1.0" encoding="UTF-8"?> <oimplugins> .... <plugins pluginpoint="oracle.iam.sample.passwdmgmt.service.PasswordElement"> <plugin pluginclass= "oracle.iam.sample.passwdmgmt.custom.NumCustomPasswordElement" version="1.0.1" name="num pwd element"/> <plugin pluginclass= "oracle.iam.sample.passwdmgmt.custom.DictionaryPasswordElement" version="1.0.1" name="Dictionary password element" /> </plugins> .... </oimplugins>
ノート:
複数のバージョンのプラグインを格納でき、機能によって特定のバージョンのプラグインをプラグイン・フレームワークからリクエストできます。デフォルトでは、現在のすべてのプラグイン・ポイントがプラグインの最新のバージョンをロードします。
このXMLには、2つのプラグイン宣言があります。両方のプラグインが同じプラグイン・ポイントから拡張されます。
15.6 プラグインの登録
APIおよびプラグイン登録ユーティリティを使用して、プラグインを登録できます。
この項では、APIおよびプラグイン登録ユーティリティを使用してプラグインを登録および登録解除する方法について説明します。次の項目が含まれます。
15.6.1 APIを使用したプラグインの登録および登録解除
登録関連のタスクにPlatformService.registerPlugin
APIおよびPlatformService.unRegisterPlugin
APIを使用できます。
次はその例です。
System.out.println("Creating client...."); String ctxFactory = "weblogic.jndi.WLInitialContextFactory"; String serverURL = "t3://OIM_HOSTNAME:OIM_PORT"; System.setProperty("java.security.auth.login.config", "OIM_CLIENT_HOME/conf/authwl.conf"); String username = "USER_NAME"; char[] password = "PASSWORD".toCharArray(); Hashtable env = new Hashtable(); env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL,ctxFactory); env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, serverURL); oimClient = new OIMClient(env); System.out.println("Logging in"); oimClient.login(username, password); PlatformService service = platform.getService(PlatformService.class); File zipFile = new File(fileName); FileInputStream fis = new FileInputStream(zipFile); int size = (int) zipFile.length(); byte[] b = new byte[size]; int bytesRead = fis.read(b, 0, size); while (bytesRead < size) { bytesRead += fis.read(b, bytesRead, size - bytesRead); } fis.close(); service.registerPlugin(b); service.unRegisterPlugin(pluginID, version);
ノート:
Oracle Identity Managerと統合するためのクライアントの開発におけるOIMClientの使用の詳細は、OIMClientの使用を参照してください。
15.6.2 プラグイン登録ユーティリティを使用したプラグインの登録および登録解除
プラグイン登録ユーティリティを使用して、プラグインを登録および登録解除します。
この項では、プラグイン登録ユーティリティを使用してプラグインを登録および登録解除する方法について説明します。次の項目が含まれます。
15.6.2.1 プラグイン登録ユーティリティ
プラグインの登録および登録解除にプラグイン登録ユーティリティを使用できます。このユーティリティでは、次のファイルが使用されます。
-
pluginregistration.xml
-
ant.properties
これらのファイルは、OIM_HOME/plugin_utility/ディレクトリにあります。
ノート:
プラグイン登録ユーティリティには、Apache Antバージョン1.7以上が必要です。
15.6.2.2 プラグイン登録ユーティリティを使用するための前提条件
このユーティリティを使用する前に、次のことを実行します。
-
次に示すように、JAVA_HOMEおよびANT_HOME環境変数を設定してください:
JAVA_HOMEの設定:
Linux:setenv JAVA_HOME /home/Oracle/Java/jdk1.8.0_171
Window:set JAVA_HOME=C:\Oracle\Java\jdk1.8.0_171
ANT_HOMEの設定:
Linux:setenv ANT_HOME $MW_HOME/oracle_common/modules/thirdparty/org.apache.ant/1.9.8.0.0/apache-ant-1.9.8
Window:set ANT_HOME=%MW_HOME%\oracle_common\modules\thirdparty\org.apache.ant\1.9.8.0.0\apache-ant-1.9.8
-
ant.propertiesのwls.homeおよびoim.homeの値を設定します。
たとえば:
wls.home =.../middleware/wlserver oim.home =..../middleware/Oracle_IDM1/server
さらに、ant.propertiesファイルにmw.homeのパスを設定します。また、次の行を非コメント化します。
#login.config=${oim.home}/config/authwl.conf
15.7 プラグインの移行
デプロイメント・マネージャでは、Oracle Identity Managerのあるデプロイメントから他のデプロイメントへのプラグインの移行をサポートしています。
たとえば、イベント・ハンドラをテスト環境で実装した後、デプロイメント・マネージャを使用して本番環境に移行することができます。図15-2に、デプロイメント・マネージャを使用したプラグインのエクスポートを示します。
関連項目:
デプロイメント・マネージャの詳細は、Oracle Identity Governanceの管理のデプロイメント・マネージャを使用した増分移行を参照してください