遅ればせながら 10月23日にリリースされた Visual Studio 2012 用の Windows Identity Foundation Tools を試してみます。
まず、機能面の紹介です。
基本的には以前の WIF の Federation Utility と変わりませんが、個人的には下記が大きなポイントだと思います。
1.Identity Provider を ローカル STS、ビジネス Identity Provider(AD FS2.0)、Windows Azure Access Control Service から選択できるようになった。
⇒以前は、新しい STS を作成するか、既存の STS を利用するかの選択だった。
2.管理者として Visual Studio を実行しなくても Identity and Access Tool が利用できるようになった。
⇒以前は管理者として Visual Studio を実行しないと Federation Utility が実行できなかった。
3.ACS 側の設定を自動的に作成してくれるようになった。
⇒以前は ACS 上に RP の作成およびクレーム・ルールの作成を手動で行う必要があった。
4.認証されていないリクエストに対するアクションを選択できるようになった。
⇒以前は単純に STS にリダイレクトするだけだったが、今回から加えて controller を生成することが出来るようになった。
特に3番目、4番目については開発者にとって非常に有用な機能なのではないでしょうか?
では、早速試してみます。
■モジュールのダウンロードとインストール
モジュールは vsix 形式で提供されていますので、ダウンロード、実行すると Visual Studio の拡張機能が有効になります。
Identity and Access Tool のダウンロード URL
http://visualstudiogallery.msdn.microsoft.com/e21bf653-dfe1-4d81-b3d3-795cb104066e
■プロジェクトの作成
Controller の自動生成を試してみたいので、今回は MVC4 のプロジェクトを作ってみます。もちろん Visual Studio は管理者で実行しなくても大丈夫です。
テンプレートから web -> ASP.NET MVC 4 Web アプリケーションを選択し、適当な名前を付けてプロジェクトを作成します。
OK をクリックするとプロジェクト テンプレートの選択画面が出てきますが、デフォルトで選択されている[インターネット アプリケーション]を選んだまま OK をクリックします。
■Identity and Access Tool の設定
プロジェクトの作成が終わったら、ソリューションエクスプローラからプロジェクト名を右クリックして表示される[Identity and Access]を開きます。
Choose where your users are from でどの STS を使うのか選択できます。今回は ACS の自動設定を試してみたいので、[Use the Windows Azure Access Control Service]を選択します。
すると、Select one or more providers from the ones configured in the ACS Namespace: で使用する ACS の Namespace の設定を行うリンクが表示されるので、クリックします。
Configure ACS namespace のダイアログが表示されるので、ACS namespace および management key を入力します。
ここで設定する management key は ACS の管理ポータルの管理サービスのパスワードです。
設定が完了し、ダイアログを閉じると ACS 上に設定されている IdP 一覧が取得されて表示されるので、このアプリケーションで利用したい IdP を選択し、一旦 OK をクリックし Identity and Access Tool を閉じます。
ちなみに、このとき ACS 管理ポータルを見ると 証明書利用者アプリケーションとして作成したアプリケーションが登録されていることがわかります。
同様に規則グループも自動生成されます。内容は単なるパススルーなので、必要に応じて編集をしてあげる必要はあります。
■Controller の自動生成
次は、これまた新機能である Controller の自動生成を試します。
再び Identity and Access Tool を起動し、今度は[Configuration]タブを開きます。
すると、Choose how to handle unauthenticated requests という項目があるので、[Generate a controller in your project to handle the authentication experience at the following address]を選択します。
これで、認証されていないリクエストに対応する Controller が生成されましたので、実際に認証が必要なリクエストを行うように設定を行います。
今回はデフォルトの About 画面を認証が必要な画面として定義してみます。
方法は簡単で、HomeController.cs の About() に対して [Authorize] を追加するだけです。
■アプリケーションの実行
では、F5 キーを押して実際にアプリケーションを実行してみます。
起動してきたら[バージョン情報]をクリックします。
すると、ログインページが表示されます。ホームレルム ディスカバリ先として、先ほど ACS から取得してきた IdP 一覧が表示されるのがわかります。
今回は Google を選択してみます。Google アカウントへリダイレクトされ、Account Chooser が表示されるので、使いたいアカウントをクリックします。
認証が終わると、ホーム画面へ戻り、ユーザ名が取得できているのがわかります。
いかがだったでしょうか?非常に単純なサンプルだったので実際は色々とカスタマイズが必要にはなるでしょうが、ほぼノンコードでここまで出来るようになっている、という意味で以前のツールに比べてもかなりの進化を遂げていることがわかります。
ACS を使って多くの外部 IdP ユーザを対象にしたアプリケーションを簡単に開発できるので、EC サイトなど B2C シナリオではかなり有用な機能になるのではないかと思います。