もちろん元々用意されているMAでもある程度のシステムはカバーしているのですが、カスタムのMAを作成して対応していないシステムとの同期をさせることもできます。
その時に使うのが、
Extensible Connectivity(XMA)
です。
このタイプのMAを使うとコーディングは必要ですが同期先システムに合わせてカスタムMAを作成することができます。
今回はこの仕組みを使ってGoogle Appsへのユーザの作成・更新・削除を行うMAを作ってみたいと思います。
別のエントリでも述べているようにAD FS2.0を使ってGoogle AppsへのログインをActive Directoryの認証で行う、という方法もありますので、その方法と合わせるとGoogle Apps上のユーザのライフサイクル管理と認証を完全に管理することができます。
今回はこの仕組みを使ってGoogle Appsへのユーザの作成・更新・削除を行うMAを作ってみたいと思います。
別のエントリでも述べているようにAD FS2.0を使ってGoogle AppsへのログインをActive Directoryの認証で行う、という方法もありますので、その方法と合わせるとGoogle Apps上のユーザのライフサイクル管理と認証を完全に管理することができます。
■準備
まず、必要となる環境ですがGoogle Apps上のユーザを外部から管理するためにはGoogle AppsのProvisioning APIを使う必要があります。
その場合、
Google Apps Premium Edition
Google Apps Education Editionon
のどちらかが必要になりますので予め契約をしておく必要があります。(Premium Editionには30日間の試用期間あり)
※ちなみに1ユーザから契約ができますが、1ユーザだけではユーザの追加ができないので、最低2ユーザは契約しておく必要があります。
購入(もしくは試用)が出来たらGoogle Appsの管理コンソールより、ユーザーとグループ -> 設定 メニューで[Provisioning APIを有効にする]にチェックを入れます。
これでGoogle Apps側の準備は完了です。
まず、必要となる環境ですがGoogle Apps上のユーザを外部から管理するためにはGoogle AppsのProvisioning APIを使う必要があります。
その場合、
Google Apps Premium Edition
Google Apps Education Editionon
のどちらかが必要になりますので予め契約をしておく必要があります。(Premium Editionには30日間の試用期間あり)
※ちなみに1ユーザから契約ができますが、1ユーザだけではユーザの追加ができないので、最低2ユーザは契約しておく必要があります。
購入(もしくは試用)が出来たらGoogle Appsの管理コンソールより、ユーザーとグループ -> 設定 メニューで[Provisioning APIを有効にする]にチェックを入れます。
これでGoogle Apps側の準備は完了です。
次に開発を行うための準備をします。
私はVisual Studio 2010 Ultimate Editionを使っていますが、FIMのExtension ProjectはVisual Studio 2008がデフォルトなので当然2008でも構いません。
.NET環境からGoogleのProvisioning APIを利用するためのクラスライブラリがGoogleから提供されているので、以下のURLからダウンロードしセットアップしておきます。
URL
http://code.google.com/p/google-gdata/downloads/list
モジュール
Google Data API Setup (1.6.0.0).msi
まとめ(準備)
・Google Apps Premium or Education Editionの契約(2ユーザ以上)
・Visual Studio 2008 / 2010
・Google Data APIライブラリのインストール
※もちろんFIMも必要です(笑)
■カスタムMAの作成
早速カスタムMAを作成するのですが、まずはFIM Synchronization ServiceのコンソールでMAを作成します。先にMAを作成することでFIMがあらかじめ用意しているカスタムMAのプロジェクトテンプレートを使うことができるようになります。
以下の通り、MAを作成します。(デフォルトから変更する部分のみ)
※テンプレートファイルは以下の文字列を保存したテキストファイルをあらかじめ用意しておきます。(MAの作成以後は使用しません)
Name,givenName,sn,userPassword
※Join / Projection / Attribute FlowはCodeless Provisioningを使う場合は不要です。
MAが作成できたらMAを右クリックし[Create Extension Projects]をクリックします。
私はVisual Studio 2010 Ultimate Editionを使っていますが、FIMのExtension ProjectはVisual Studio 2008がデフォルトなので当然2008でも構いません。
.NET環境からGoogleのProvisioning APIを利用するためのクラスライブラリがGoogleから提供されているので、以下のURLからダウンロードしセットアップしておきます。
URL
http://code.google.com/p/google-gdata/downloads/list
モジュール
Google Data API Setup (1.6.0.0).msi
まとめ(準備)
・Google Apps Premium or Education Editionの契約(2ユーザ以上)
・Visual Studio 2008 / 2010
・Google Data APIライブラリのインストール
※もちろんFIMも必要です(笑)
■カスタムMAの作成
早速カスタムMAを作成するのですが、まずはFIM Synchronization ServiceのコンソールでMAを作成します。先にMAを作成することでFIMがあらかじめ用意しているカスタムMAのプロジェクトテンプレートを使うことができるようになります。
以下の通り、MAを作成します。(デフォルトから変更する部分のみ)
ページ | 項目 | 値 |
---|---|---|
Create Management Agent | Management agent for | Extensible Connectivity |
Name | Google Apps | |
Configure Connection Information | Specify the interfaces supported by this management agent | Export |
Spscify the export mode supported by this management agent | Call-based | |
Connected data source extension name | GoogleApps__Extension.dll | |
Connec To | Google Appsの契約ドメイン名 | |
User | Google Appsの管理者ユーザ名(emailアドレス) | |
Password | Google Appsの管理者パスワード | |
Select Template Input File | Template Input File | 任意※ |
File format | Delimited | |
Delimited Text Format | Use first row for header names | チェック |
Text qualifier | <none> | |
Configure Attributes | Set Anchor | name |
Configure Join and Projection Rule | Join Rule for person | name <direct> accountName |
Projection / Metaverse object type | person | |
Configure Attibute Flow | Datasource <- Metaverse | givenName <export> givenName |
sn <export> sn | ||
userPassword <export/Advanced> Constant[P@ssw0rd] |
※テンプレートファイルは以下の文字列を保存したテキストファイルをあらかじめ用意しておきます。(MAの作成以後は使用しません)
Name,givenName,sn,userPassword
※Join / Projection / Attribute FlowはCodeless Provisioningを使う場合は不要です。
MAが作成できたらMAを右クリックし[Create Extension Projects]をクリックします。
ここではProject Typeに[Connected Data Source Extension]を選択し、プロジェクトを作成します。
プログラム言語は任意ですがここではC#を選んでいます。また、私は開発環境を別のPCに作っていたのでLaunch in VS.Net IDEのチェックを外しています。
いよいよカスタムMAの中身のロジックを実装していきます。
プログラム言語は任意ですがここではC#を選んでいます。また、私は開発環境を別のPCに作っていたのでLaunch in VS.Net IDEのチェックを外しています。
いよいよカスタムMAの中身のロジックを実装していきます。
■カスタムMAの実装
出来上がったプロジェクトファイルをVisual Studioで開くとあらかじめ定義されたテンプレートが出来ているので、各メソッドを実装していきます。
その前に今回はGoogle AppsのProvisioning APIを使うので先にダウンロードしたライブラリへの参照設定を行います。
必要なのは、
・Google.GData.Apps.dll
・Google.GData.Client.dll
・Google.GData.Extensions.dll
への参照です。
出来上がったプロジェクトファイルをVisual Studioで開くとあらかじめ定義されたテンプレートが出来ているので、各メソッドを実装していきます。
その前に今回はGoogle AppsのProvisioning APIを使うので先にダウンロードしたライブラリへの参照設定を行います。
必要なのは、
・Google.GData.Apps.dll
・Google.GData.Client.dll
・Google.GData.Extensions.dll
への参照です。
同様にusingでそれらライブラリへの参照を宣言します。
using Google.GData.Apps;
using Google.GData.Client;
using Google.GData.Extensions;
いよいよロジックの実装ですが、あらかじめ用意されているメソッドの中で今回必要となるのは以下のメソッドです。
また、Google Appsに接続するためにAppsServiceというオブジェクトを使うので変数の宣言をしておきます。
次にBeginExportの実装です。ここでは先ほど宣言したAppsServiceのオブジェクトを生成します。
BeginExportメソッドの引数の中のconnectTo,user,passwordは先ほどMAを作成したときに設定したものがわたってきますので、それらをそのまま使ってGoogel Appsへ接続します。
次に実際のExport時に呼び出されるExportEntryメソッドです。
ここでは引数としてわたってくるmodificationTypeを見て処理が分かれます。
まずはエントリの追加(modificationType=Add)の時ですが、Google Apps Provisioning APIでCreateUserというメソッドを利用します。
引数には同じくExportEntryメソッドの引数としてわたってくるcsentryの各属性値を渡します。
次はエントリの更新(modificationType=Replace)です。ここではUpdateUserメソッドを使います。
最後にエントリの削除(modificationType=Delete)です。ここではDeleteUserメソッドを使います。
これらをswitch分で振り分けて各処理を実行させます。
尚、EndExportメソッドでは他にオブジェクトを生成した場合はオブジェクトの廃棄を行います。(今回は特に何も書きませんが)
長くなってしまいましたので、詳細なコードの解説、実際の使い方は次回解説をしたいと思います。
※コードはsourceforge.netにアップロードしてあるので解説不要の方はどうぞ。
http://sourceforge.net/projects/fim2010mas/
using Google.GData.Apps;
using Google.GData.Client;
using Google.GData.Extensions;
いよいよロジックの実装ですが、あらかじめ用意されているメソッドの中で今回必要となるのは以下のメソッドです。
メソッド名 | 役割 |
---|---|
BeginExport | Export開始時に呼び出される |
ExportEntry | Export時に呼び出される(実際のExportロジック) |
EndExport | Export終了時に呼び出される |
また、Google Appsに接続するためにAppsServiceというオブジェクトを使うので変数の宣言をしておきます。
namespace Miis_CallExport { public class MACallExport : IMAExtensibleFileImport, IMAExtensibleCallExport { AppsService service; ← ここ |
次にBeginExportの実装です。ここでは先ほど宣言したAppsServiceのオブジェクトを生成します。
BeginExportメソッドの引数の中のconnectTo,user,passwordは先ほどMAを作成したときに設定したものがわたってきますので、それらをそのまま使ってGoogel Appsへ接続します。
service = new AppsService(connectTo, user, password); |
次に実際のExport時に呼び出されるExportEntryメソッドです。
ここでは引数としてわたってくるmodificationTypeを見て処理が分かれます。
modificationType | 処理 |
---|---|
Add | エントリの追加 |
Replace | エントリの更新 |
Delete | エントリの削除 |
まずはエントリの追加(modificationType=Add)の時ですが、Google Apps Provisioning APIでCreateUserというメソッドを利用します。
引数には同じくExportEntryメソッドの引数としてわたってくるcsentryの各属性値を渡します。
service.CreateUser( csentry["Name"].Value.ToString(), ← 名前(ログインID) csentry["givenName"].Value.ToString(), ← 名(First Name) csentry["sn"].Value.ToString(), ← 姓(Family Name) csentry["userPassword"].Value.ToString() ← パスワード ); |
次はエントリの更新(modificationType=Replace)です。ここではUpdateUserメソッドを使います。
// ユーザの属性をセットする UserEntry user = service.RetrieveUser(csentry["Name"].Value.ToString()); user.Name.FamilyName = csentry["sn"].Value.ToString(); user.Name.GivenName = csentry["givenName"].Value.ToString(); user.Login.Password = csentry["userPassword"].Value.ToString(); // ユーザを更新する service.UpdateUser(user); |
最後にエントリの削除(modificationType=Delete)です。ここではDeleteUserメソッドを使います。
service.DeleteUser(csentry["Name"].Value.ToString()); |
これらをswitch分で振り分けて各処理を実行させます。
switch (modificationType) { case ModificationType.Add: // エントリの作成 break; case ModificationType.Replace: // エントリの更新 break; case ModificationType.Delete: // エントリの削除 break; } |
尚、EndExportメソッドでは他にオブジェクトを生成した場合はオブジェクトの廃棄を行います。(今回は特に何も書きませんが)
長くなってしまいましたので、詳細なコードの解説、実際の使い方は次回解説をしたいと思います。
※コードはsourceforge.netにアップロードしてあるので解説不要の方はどうぞ。
http://sourceforge.net/projects/fim2010mas/
0 件のコメント:
コメントを投稿