特集
MIIS 2003プログラミング(前編)

企業システムのID統合を推進するMIISとは何か?

福井 厚 (Microsoft MVP 2005 - Solution Architect)
2005/06/22

Page1 Page2

■MIIS管理用コンソール「Identity Manager」

 次の画面はMIISにおける管理用コンソールである「Identity Manager」である(なお本稿ではService Pack 1を適用したMIIS 2003を使用している)。

図3 MIIS 2003のIdentity Manager
複雑な処理をMIIS上で管理するためのコンソール。
  [Management Agents](管理エージェント)ペイン。ここでは作成した管理エージェントの一覧が表示される。右側のメニューで管理エージェントに対する設定が行える。
  [Profile Name: User Name](実行プロファイル名:ユーザー名)ペイン。ここにはプロファイルの実行ステータスが表示される。

 Identity Managerでは、以下に挙げたような多くの処理を行うことができる。

  • 管理エージェントの作成/変更/削除
  • 実行プロファイルの作成/変更/削除
  • コネクタ・スペース・エントリの検索
  • メタバース・オブジェクト・タイプの作成/変更/削除
  • メタバース・エントリの検索
  • コネクタ・スペース・エントリとメタバース・エントリの手動での接続/接続解除
  • 実行ログの確認
  • 設定情報のインポート/エクスポート

 またルール拡張を使用するかどうかの設定も同様にIdentity Managerで行う。

簡単なルール拡張プログラミングの例

 さて、MIISの処理の流れについて理解できたところで、簡単なルール拡張プログラミングを紹介しよう。

 MIISのルール拡張は、GUIでは設定できない複雑なルールを実現するために利用される。ここではインポート属性フローのルール拡張を例に取り上げよう。

 インポート属性フローとは、データソースからインポートしたID情報をメタバース・エントリの属性へマップするための処理である。インポート属性フローのマッピングには、「ダイレクト(直接)」「定数値」「識別子のコンポーネント(識別名)」「ルール拡張」が指定できる。

マッピングの種類 説明
ダイレクト コネクタ・スペース・エントリの属性値をそのままメタバース・エントリの属性にマップする
定数値 あらかじめ指定した値をメタバース・エントリの属性にマップする
識別子のコンポーネント 例えば「CN=鈴木 一郎,CN=Users,DC=domain,DC=local」という識別子に、コンポーネント番号1を指定すると、最初のコンポーネントである、[鈴木 一郎]という値をメタバース・エントリの属性にマップする
ルール拡張 上記の3つの指定では要件を満たすことができない場合に指定する。属性値を自由に加工したうえでメタバース・エントリの属性にマップすることができる
インポート属性フローのマッピングの種類

 ここでは、社員情報用の管理エージェントのインポート属性フローでルール拡張を利用する例として、社員情報ビューの「姓」という列と、「名」という列の値を結合して、メタバース上のpersonオブジェクト・タイプのdisplayName属性にマップするサンプル・コードを紹介する。

 それでは、インポート属性フローのルール拡張を作成してみよう。なお、紙面の関係上、管理エージェントの作成および設定手順を詳細に解説することはできない。詳しくは、Microsoft Identity Integration Server 2003 製品ヘルプファイルおよびシナリオステップバイステップ日本語資料をダウンロードして確認してほしい。

(1)属性フローのルールを作成する

 まず属性フローのルールを新規作成する。これは以下の手順で行う。

 Identity Managerですでに作成した管理エージェントのプロパティを開き、[Management Agent Designer]ペインから[Configure Attribute Flow]を選択して[Configure Attribute Flow]ペインを表示する。

 そして、[Configure Attribute Flow]ペインの下にある[Mapping Type]の欄で「Advanced」ラジオボタンをチェックし、[Data Source Attribute]リストボックスから「姓」と「名」を選択、[Metaverse attribute]のリストボックスから「displayName」を選択して[New]ボタンをクリックする(図4)。

図4 インポート属性フローのルール拡張の設定
Identity Managerですでに作成した管理エージェントのプロパティを開く。
  [Management Agent Designer]ペインから「Configure Attribute Flow」を選択する。
  [Configuration Attribute Flow]の設定内容が表示されている。下にある[Build Attribute Flow]の領域で、設定項目の追加(New)/編集(Edit)/削除(Delete)ができる。[Data source attribute]リストボックスからマップ元の属性を、[Metaverse attribute]リストボックスからマップ先の属性を選択する。[New]ボタンをクリックしてマッピング・タイプを指定する。

(2)インポート属性フロー(Import Attribute Flow)の詳細設定

 次に、いま作成した属性フローについて詳細設定を行う。

 [Build Attribute Flow](=属性フロー作成欄)の[New]ボタンがクリックされると、[Advanced Import Attribute Flow Options]ダイアログが表示されるので、[Rules extension]ラジオボタンをチェックし、[Flow rule name]テキストボックスに「displayName」を指定する(図5)。

図5 インポート属性フローのルール拡張の設定
[Build Attribute Flow](=属性フロー作成欄)の[New]ボタンがクリックされると、[Advanced Import Attribute Flow Options]ダイアログが表示される。
  [Rules extension]ラジオボタンにチェックを入れる。
  [Flow rule name]テキストボックスに「displayName」を入力する。

 この設定により、MIISの同期処理の実行タイミングで、インポート属性フローのルール拡張が呼び出されるようになる。このとき、ルール拡張ハンドラに渡されるFlowNameには、[Flow rule name]テキストボックスに入力した値(本稿の例では「displayName」)が入る。

(3)インポート属性フローのルール拡張プログラミング

 [Advanced Import Attribute Flow Options]ダイアログの設定ができたら、先ほどの管理エージェントのプロパティを開き、[Management Agent Designer]ペインから[Configure Extensions]を選択して[Configure Extensions]ペインを開き、そこでDLL名(=.NETで開発するMIISルール拡張用のプログラムの名前)をあらかじめ指定しておく。

図6 MIISルール拡張用のプログラムの設定
プロパティの[Management Agent Designer]ペインから「Configure Extensions」を選択して、[Configure Extensions]の設定項目を表示したところ。
  ルール拡張用DLLの名前を指定する。

 Identity Managerのメニュー・バーから[Actions]−[Create Extension Projects]を選択する。これにより[Create Extension Project]ダイアログが表示されるので、後は次の画面の手順に従って項目を設定していけば、Visual Studio .NET 2003のプロジェクトが自動生成され、DLLのためのソース・コードのひな型を出力してくれる。

図7 MIISルール拡張プログラム用のVisual Studio .NET 2003プロジェクトの生成
Identity Managerのメニュー・バーから[Actions]−[Create Extension Projects]を選択すると、[Create Extension Project]ダイアログが表示される。
 

[Programming language]コンボボックスでプログラミング言語(「Visual Basic .NET 2003」もしくは「Visual C# .NET 2003」)を選択する。

  [Project type]コンボボックスから「Rules Extention」を選択する。
  [Project name]テキストボックスにプロジェクト名を指定する。デフォルトでは管理エージェント名を基に自動生成される。
  [Project location]テキストボックスにプロジェクトのパスを指定する。デフォルトでは「「マイ ドキュメント」フォルダの下に作成される。
  [Launch in VS.Net IDE]チェックボックスをチェックしておくと、[OK]ボタンをクリックした後に、Visual Studio.NET 2003が起動する。

 インポート属性フローのルール拡張を実現するには、上の方法で自動生成されたソース・コード内のIMASynchronizationインターフェイスのMapAttributeForImportメソッドに、必要なコードを追加する。

///<summary>
///社員情報用の管理エージェントのインポート属性フローで
///ルール拡張を利用する。
///</summary>
///<param name="FlowRuleName">属性フローのルール名</param>
///<param name="csentry">コネクタ・スペース・エントリ</param>
///<param name="mventry">メタバース・エントリ</param>
void IMASynchronization.MapAttributesForImport(
    string FlowRuleName, CSEntry csentry, MVEntry mventry)
{
  switch (FlowRuleName)
  {
    case "displayName":
      SetDisplayName(csentry, mventry);
      break;

    default:
      throw new EntryPointNotImplementedException();
  }
}

///<summary>
///社員情報ビューの「姓」という列と、「名」という列の値を結合して、
///メタバース上のpersonオブジェクト・タイプのdisplayName属性に
///マップする。
///</summary>
///<param name="csentry">コネクタ・スペース・エントリ</param>
///<param name="mventry">メタバース・エントリ</param>
private void SetDisplayName(CSEntry csentry, MVEntry mventry)
{
  if (csentry["姓"].IsPresent && csentry["名"].IsPresent)
  {
    mventry["DisplayName"].Value =
        csentry["姓"].StringValue + " " + csentry["名"].StringValue;
  }
}
リスト1 インポート属性フローのルール拡張のコード例

 リスト1が、インポート属性フローのルール拡張プログラミングの例である。以下にこのコードの要点について解説しよう。

 MIISは、対象となる拡張ルール名を第1パラメータのFlowRuleName変数にセットして、このIMASynchronization.MapAttributesForImportメソッドを呼び出す。 では、拡張ルール名が事前に指定した“displayName”であることを確認している。もし、それ以外の名前がセットされていたら、想定外の状況なのでEntryPointNotImplementedException例外を発生させる。FlowRuleNameが正しくセットされていたら、SetDisplayNameメソッドを呼び出す。

 SetDisplayNameメソッドは独自に作成したプライベートなメソッドで、まず渡されたCSEntryクラスのインスタンス(csentry変数)の「姓」と「名」という属性名に値が存在することを確認し()、同じく渡されたMVEntryクラスのインスタンス(mventry変数)のdisplayName属性のValueプロパティに、「姓」と「名」という属性のStringValueプロパティの値をスペースで連結したものを代入している()。

 CSEntryクラスはその名前から想像できるように、コネクタ・スペース・エントリを表すクラスである。同様にMVEntryクラスはメタバース・エントリを表す。リスト1の処理によってメタバース・エントリのdisplayName属性に値がマップされることになる。

 以上が、簡単なルール拡張プログラミングの例である。ここで登場したCSEntryクラス、MVEntryクラス、IMASynchronizationインターフェイスなどについては、次回後編のMIISルール拡張プログラミングで解説する。End of Article


 INDEX
  [特集]
  MIIS 2003プログラミング(前編)
  企業システムのID統合を推進するMIISとは何か?
    1.MIISの基本概念と処理の流れ
  2.簡単なルール拡張プログラミングの例
  MIIS 2003プログラミング(後編)
  柔軟なID管理を実現するMIISルール拡張プログラミング
    1.管理エージェント用のルール拡張
    2.メタバースのルール拡張
 


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間