特集
|
Page1
Page2
|
前回は、企業内の各情報システムの「ID統合」と「パスワード同期」を強力に推進するためのサーバ製品である「Microsoft Identity Integration Server 2003」(以下、MIIS)について、その基本概念と処理の流れ、ツールなどを解説した。さらに、そのMIISの処理ルールをカスタマイズ・拡張するための簡単なプログラミング(以下、MIISルール拡張プログラミング)の例を示した。
今回はMIISルール拡張プログラミングについて、より詳しく見ていく。なお今回のプログラミングでは、前回の知識が必須となる。「メタバース」や「プロビジョニング」についての内容が分からないような場合には、もう一度前回の内容を読み直していただきたい。
MIISルール拡張プログラミング
MIISルール拡張プログラミングは、MIISで定義されたインターフェイスのメソッドを実装することで実現する。MIISで定義されているルール拡張用のインターフェイスには以下の2種類がある(いずれもMicrosoft.MetadirectoryServices名前空間に所属するインターフェイス)。
-
管理エージェントのルール拡張用インターフェイスであるIMASynchronizationインターフェイス
-
メタバースのルール拡張用インターフェイスであるIMVSynchronizationインターフェイス
ルール拡張プログラミングでは、これらのインターフェイスのメソッドを実装するが、その際にメソッドのパラメータを経由してMIISで定義されているクラスのインスタンスが渡される。
MIISでは多くのクラスが定義されているが、メソッドのパラメータとして渡されるクラスのインスタンスの中で、特に重要なものを表1に挙げる。
クラス名 | 説明 |
MVEntry | MVEntryクラスはメタバース上のエントリを表す。 |
CSEntry | CSEntryクラスはコネクタ・スペース上のエントリを表す。 |
ConnectedMA | ConnectedMAクラスはメタバース・オブジェクトへ接続しているコネクタを含む管理エージェントを表す |
Attrib | AttribクラスはCSEntryとMVEntryに関連する属性を表す。Attribクラスは抽象クラスであり、このクラスを継承したサブクラスがインスタンス化される。属性のタイプには、String、Integer、Reference、Binary、Booleanがある |
表1 ルール拡張で使用する重要なクラス | |
いずれのクラスもMicrosoft.MetadirectoryServices名前空間に所属する。 |
これらのクラスは、コネクタ・スペース上の個々のエントリやメタバース上の個々のエントリを表しており、MIISが各インターフェイスのメソッドを呼び出す前に、メソッドの対象となるエントリごとにインスタンスを生成し、メソッドのパラメータとして引き渡す処理を行う。
ルール拡張プログラミングでは、パラメータとして渡された、これらのクラスのインスタンスから値を取得したり、クラスが提供するインスタンス・メソッドを実行したり、属性に値をセットしたりすることで、コネクタ・スペース・エントリやメタバース・エントリに影響を与えることができる。
例えば、あるデータソースのIDデータをメタバース・エントリに結合するときに、特定の条件に一致するIDデータは結合したくない場合、フィルタ・ルールにルール拡張を使用して複雑なルールを適用することができる。これを実現するには、IMASynchronization.FilterForDisconnectionメソッドに、任意のフィルタ・ルールをプログラミングする(詳しくは、後述する表2のFilterForDisconnectionの説明を参照のこと)。
このように、ルール拡張プログラミングによって、単純な値チェックだけのルールでは実現できない、さまざまな条件を組み合わせた高度なフィルタリングが可能となる。また、フィルタ条件に一致する特定のコネクタ・スペース・エントリは、ディスコネクタ(非接続状態)となってメタバース・エントリと結合されないため、ほかのデータソースにも影響を与えなくなる。
それでは、管理エージェントとメタバースのそれぞれのルール拡張プログラミングについてサンプル・プログラムをベースに解説していこう。
管理エージェント用のルール拡張プログラミング
管理エージェントのルール拡張は、個々のデータソースに関連した管理エージェントごとに、それらの同期処理のタイミングで実行される。管理エージェントのルール拡張プログラミングは、IMASynchronizationインターフェイスの各種メソッド(表2)を実装する形で行う。
メソッド名 | 説明 |
Deprovision | メタバース上のエントリが削除され、そのエントリと接続していたコネクタ・スペースのエントリが非接続オブジェクトになるときに呼び出される。このメソッドは呼び出されるとDeprovisonAction列挙型(Microsoft.MetadirectoryServices名前空間)の値として「Disconnect(切断)」「ExplicitDisconnect(明示的な切断)」「Delete(削除)」のいずれかを返さなければならない |
FilterForDisconnection | パラメータに渡されたコネクタのCSEntryオブジェクトがフィルタ対象としてディスコネクタになるかどうかを決定する。フィルタ対象とする場合は「true」を返す |
Initialize | ルール拡張オブジェクトを初期化する |
MapAttributesForExport | メタバース・エントリからコネクタ・スペース・エントリへ属性値をマップするときに呼び出される |
MapAttributesForImport | コネクタ・スペース・エントリからメタバース・エントリへ属性値をマップするときに呼び出される |
MapAttributesForJoin | メタバース・エントリを検索するためのCSEntry属性値に基づく値リストを生成するために呼び出される |
ResolveJoinSearch | 結合ルールが結合の衝突解決のためにルール拡張を使用するように設定されており、上記のIMASynchronization.MapAttributesForJoinメソッドが生成した値リストとメタバースの検索がマッチした結果が1つ以上あった場合に呼び出される。このメソッドは結合の衝突を解決するために、マッチした候補の中から結合先を決定して返さなければならない |
ShouldProjectToMV | 新しいコネクタ・スペース・エントリがメタバース・エントリに結合されなかった場合に、メタバース上に新しいエントリを投影するかどうかを決定するために呼び出される |
Terminate | ルール拡張オブジェクトが必要なくなったときに呼び出される |
表2 IMASynchronizationインターフェイスのメソッド群 |
■管理エージェント用ルール拡張の例
では管理エージェント用ルール拡張の例を紹介しよう。以下に示すサンプル・プログラム(ソース1)ではActive Directory用管理エージェントのエクスポート属性フローについてルール拡張プログラミングを行っている。
このサンプル・プログラムでは、メタバース・エントリのemployeeStatus属性の値が「現職」の場合は、コネクタ・スペース・エントリのuserAccountControl属性にユーザー・アカウントを有効化する値を、「休職」または「退職」の場合は、無効化する値をセットしている。
つまり、これにより人事情報などのデータソースの値を基にして、Active Directory上のアカウントを自動的に制御することが可能となる。社員数が多く、多数のアカウントを制御する必要がある企業にとってはとても魅力的な手法ではないだろうか。
このルール拡張は管理エージェントの同期処理の時点で実行され、その後にActive Directory用の管理エージェントのエクスポート処理が実行されると、Active Directory上の対応するユーザー・アカウントがメタバースの属性値によって有効化または無効化されることになる。詳しくは、ソース・コード中のコメントを参照してほしい。
ソース1では、IMASynchronization.MapAttributesForExportメソッドの実装方法を示している。この例ではフロー・ルール名が「userAccountControl」のときに、プライベート・メソッドのSetUserAccountStatusを呼び出す。
|
|
ソース1 管理エージェント・ルール拡張のサンプル・プログラム | |
MIISのIMASynchronization.MapAttributesForExportメソッドを実装することで、管理エージェントのルールを拡張している。 |
SetUserAccountStatusメソッドは、employeeStatusの値によってアカウントを有効化、または無効化する。以下のソース2は、その実装コードである。
|
|
ソース2 Active Directoryのユーザー・アカウントを有効化/無効化するコード(ソース1の続き) |
次に、メタバースのルール拡張を見ていこう。
INDEX | ||
[特集] | ||
MIIS 2003プログラミング(前編) | ||
企業システムのID統合を推進するMIISとは何か? | ||
1.MIISの基本概念と処理の流れ | ||
2.簡単なルール拡張プログラミングの例 | ||
MIIS 2003プログラミング(後編) | ||
柔軟なID管理を実現するMIISルール拡張プログラミング | ||
1.管理エージェント用のルール拡張 | ||
2.メタバースのルール拡張 | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|