2010年8月11日水曜日

新AppFabric ACSでサードパーティIdPと認証連携

現在ラボ公開された新AppFabricのACSがGoogleやFaceBookなどのサードパーティIdPに対応したということで早速試してみました。


その前にAppFabricの新機能ですが、主要な点として
・WIF(Windows Identity Foundation)との統合
・Windows Live ID、Google、Yahoo、FaceBookをIdPとしてサポート
・同じくAD FS2.0をIdPとしてサポート
・OAuth WRAP、WS-Trust、WS-Federationプロトコルのサポート
・SAML1.1、SAML2.0、SWT(Simple Web Token)トークンのサポート
・カスタマイズ可能なホームレルムディスカバリ(どのIdPで認証されるか)の統合
・ACS設定をODataベースで管理可能
・ACS設定を行うWebポータルを用意
というものが挙げられています。



今回上記の中で特にサードパーティのIdPとの連携を試してみたいと思います。

仕組みとしては、下記の図のような形になります。














では、早速試してみます。
まずは、AppFabricのラボポータルへアクセスします。

https://portal.appfabriclabs.com/


まずはLiveIDで認証された後、通常のWindows Azureなどと同じように名前空間の登録やリージョンを設定し、プロジェクトを作成します。













次に、作成したプロジェクトのAccess Control Serviceの設定を行います。
プロジェクト内のAccess Control Serviceを選択すると下記の画面が出てくるので、[Manage]をクリックします。













実はこのACSの管理ポータル自体もACSをIdPとして設定されたアプリケーションなのでサインインするためのIdPの選択画面が出てきます。初めてのアクセスだとWindows Live IDしか設定されていないので、ここはWindows Live IDでサインインします。

すると、Access Control Service自体の設定を行うアプリケーションが出てきます。
ここで以下の項目の設定が可能です。
Trust Relationship
・Identity Providers
 →IdPの設定を行します。
・Relying Party Applications
 →RP(アプリケーション)を設定します。
・Rule Groups
 →Claimのマッピングルールを設定します。

Service Settings
・Certificates and Keys
 →証明書などの設定を行います。
・Service Identities
 →名前空間内のサービスIDなどの設定を行います。

Application Code
・Application Integration
 RPのアプリケーションにACSを統合する際に使用するパラメータ等があります。
















それぞれ順番に設定を行って行きたいと思います。

1.Identity Providers
 Add Identity Providersをクリックすると以下の画面が出てきます。














 今回はAD FS2.0とGoogleを試してみます。

 まず、AD FS2.0ですが[Add]をクリックすると表示名とFederationMetadataを設定する画面が出てきますので、それぞれ設定を行います。
 注意点ですが、現状FederationMetadataを使ってしか設定ができないので、ACSからFederationMetadataが取得できる状態、つまりインターネット上に公開してあるAD FS2.0が必要です。
















 [save]をクリックするとIdentity ProviderとしてAD FSが作成されます。

 続いてGoogleを設定します。こちらは特別な設定項目は存在せず自動的に設定が行われます。(Image URLという項目がありますが、これはログイン画面に特別なイメージを表示したい場合のみ指定します)

 設定が終わるとIdP一覧が以下のようになっているはずです。











2.Relying Party Applications
 次はRPとなるアプリケーションの設定です。Add Relying Party Applicationをクリックし、アプリケーションの設定を行います。

 設定項目は、下記の通りです。
 ・name:表示名
 ・Realm:アプリケーションのURL
 ・Return URL:認証後、トークンをポストするアプリケーションのURL
 ・Token format:トークンのタイプ
 ・Token encryption:トークンの暗号化設定
 ・Token lifetime:トークンの有効期間
 ・Rule groups:Claimマッピングルールのグループ

 今回はローカルIISで動かすASP.NETアプリケーションを考えていますので、
 ・name:test-rp
 ・Realm:http://localhost:20000/
 ・Return URL:http://localhost:20000/
 ・Token format:SAML 2.0
 のみを設定します。
















 [Save]をクリックして設定を保存します。


3.Rule Groups
 次はClaimのマッピングルールの設定です。

 先ほどRPを設定するときにCreate New Rule Groupがデフォルトで指定されているので先ほどのRP用のRule Groupが「Default Rule Group for test-rp」という形で自動的に作成されています。

 そのグループを開き、[Generate Default Rules]というボタンをクリックすると現在設定されているIdPに関して自動的にパススルーするルールが作成されます。















 最後に忘れずに[Save]をクリックすればRule Groupの設定は完了です。


4.Certifications and Keys
 次はトークン署名に使う証明書の設定です。

 自己発行証明書でも構わないので.pfxファイルをアップロードします。
 これがACSが発行するトークンの署名に利用されます。

 設定項目は以下の通りです。
 ・Name:表示名
 ・Used for:利用用途(トークンの署名もしくは暗号化)
 ・Type:証明書のタイプ
 ・Certificate:証明書

 今回は以下の通り設定します。
 ・Name:My Cert
 ・Used for:Token Signing
 ・Type:X.509 Certificate
 ・Certificate:作成したpfxファイルとパスワード

 [Save]をクリックし設定を完了します。
















ここまででACS側の設定は完了です。
ここからはRPとなるアプリケーションを作成していきます。

Visual Studio 2010を管理者として起動し、ASP.NET Webアプリケーションを作成します。
※今回は.NET Framework3.5をベースにプロジェクトを作成しましたが、.NET Framework4.0をベースに作る場合は後でWeb.configにhttpRuntime requestValidationMode="2.0"を書いてあげる必要があります。

実装・設定するのは以下の3点だけです。
1.URLの設定
  →今回Visual Studioのデバッグ用アプリケーションサーバとしてテストを行いましたのでポート番号を固定し、ACS上のURLと整合性を取ります。
2.STS参照の追加
  →ACSのFederationMetadataの読み込みを行い、このアプリケーションの認証はACSが行うように設定します。
3.Claimを表示するコード
  →今回は単純にわたってきたClaimをラベルに表示させます。



1.URLの設定

 ソリューションのプロパティからVisual Studio開発サーバのポートを先ほど指定した20000に設定します。














2.STS参照の追加














 以下の設定を行います。
 アプリケーションURL:http://localhost:20000
 STS Federation Metadata:https://[プロジェクト名].accesscontrol.appfabriclabs.com:443/FederationMetadata/2007-06/FederationMetadata.xml
 ※ACSポータルのApplication Integrationにエンドポイントアドレスは記載されています。

















3.Claimを表示するコード

 画面にラベルを張り付けてテキストにname属性を表示するコードを書きます。

 ここでは単純にPage_Loadに
  lbl_name.Text = Page.User.Identity.Name
 とコードを書いています。
















いよいよ実行です。
今回はVisual Studioの開発サーバを使うので、そのままF5を押してデバッグ実行です。

まず、ホームレルム(認証を受けるIdP)を選択する画面にリダイレクトされますので、AD FS2.0を選んでみます。





















AD FS2.0のログイン画面にリダイレクトされ、認証を受けるとアプリケーションに戻り、name属性が表示されます。









































次はGoogleを選択してみます。
Googleのログイン画面にリダイレクトされ、認証を受けるとアプリケーションに戻り、name属性が表示されます。









































いかがでしょうか?
当然RPを増やしていけばAppFabric ACSが発行(変換)したトークンを使いまわせるのでシングルサインオン環境の構築も容易です。

要望があるとすれば、現状ではAD FS2.0をIdPとする時にFederationMetadataを読み込む形でしかIdP設定ができないので、どうしてもインターネット上にAD FS2.0を公開する必要が出てきてしまいます。これを手動での登録、もしくはFederationMetadata.xmlのアップロードという形での対応ができればよりイントラ~インターネットの連携がしやすくなるのでは?と思います。

あとは早くラボではなく正式にリリースがされるのを期待しています。

0 件のコメント: