C# AdventCalender jp:2010 も最終日を迎えた。僭越ながらWindows Azure組である私がトリを務めさせて頂きたいと思う。
さて、今回は「Access Controlを利用したASP.NET MVC3 RC2 アプリのシングルサイオン(SSO)」を取り扱いたいと思う。AppFabric Lab内ではAccess Controlが大幅に改善されたものの、日本語でのドキュメント整備は不十分であり、一般的には余り活用されていないように見えるためだ。Windows Liveの認証連携はもちろん、GoogleやYahooといった認証とも連携ができる*1ため、「オレオレアプリが作りたいが、認証は面倒なので外に任せたい」と言った場合にもオススメだ。
まず、今回の「〜その1〜」では、ASP.NET MVC3とAccess Controlを利用した一番シンプルなSSOを実現する。
環境構築
まず、Access Controlを制御するAppFabricとASP.NET MVCを利用するための環境構築を行う。以下のモジュールをインストールしてほしい。
AppFabric LabにおけるAccess Controlの有効化
次に、AppFabric Labにアクセスして新規にAccess Controlを作成して有効化を行う。以下の手順で実施できる筈だが、手順に詰まった場合はこちらを参考にして頂きたい。
以下の手順でAccess Controlを有効化する。
- 新規の「Service Namespace」を作成
以下の画面から、「Add Service Namespace」リンクを押下してAccess Control Service画面に遷移する。
以下の画面で、有効な「Service Namespace」名を入力し、新規作成を行う。
作成後には有効化が行われるので、状態が「Active」に変更するまで待つ。
- 「Identity Providers」の追加
「Access Control Service」から「Identity Providers」リンクをクリックし、以下の画面に遷移する。
同画面で「Add Identity Provider」をクリックし、今回の例では「Google」と「Yahoo!」を追加する。完了すると以下の画面の様になるので、参考にして頂きたい。
- 「Relying Party Application」の設定
次に、Access Control Service画面から「Relying Party Application」リンクを押下する。以下の画面から「Add Relying Party Application」リンクを選択し、アプリケーションとの連携方式を設定する。
以下の画像を参考にして、設定を行ってほしい。
- 「Rule Groups」の編集
次に、Access Control Service画面から「Rule Groups」リンクを押下し、以下の画面から「Default Rule Group for C# Advent Calendar用!」を選択する。
「Edit Rule Group 」画面から、「Generate Rules」リンクを押下し、設定を変更せずに[Generate]ボタンを押下する。すると、以下の画面が表示され、ルールの生成が確認できるので、[Save]ボタンを押下して設定を完了する。
- 「Application Integration」情報の確認
Access Control Service画面から、「Application Integration」リンクを押下し、以下の画面に遷移する。当該画面の「WS-Federation Metadata 」に関しては後程利用するため、メモ帳等に張り付けて頂きたい。
ASP.NET MVC3 RC2アプリの作成
さて、次はVisual Studio 2010を立ち上げて実際にASP.NET MVC3 RC2アプリを作成する。
- ソリューションの新規作成
[新しいプロジェクト]ダイアログから「ASP.NET MVC Web Application」を選択し、「View engine:」に「Razor」を選んでアプリケーションを作成する。
- STS参照の追加
次に、STSの設定を行う。以下のように、ASP.NET MVCプロジェクトに対して右クリックして「STS参照の追加」を選択する。
まず、「フェデレーション ユーティリティ ウィザードの開始」画面で、「アプリケーション URI(U)」に「Relying Party Application」で設定した Realm:値(例では http://localhost:63000 )を入力して[次へ]ボタンを押下する。
次の様なダイアログが出るが、そのまま[はい]ボタンを押下する。
次に、「Security Token Service」画面にて、「既存のSTSを使う」を選択し、「WS-Federation Metadata」の値を入力して[次へ]ボタンを押下する。
「STS署名証明書のチェーンの検証エラー」画面では、そのまま[次へ]ボタンを押下する。
「セキュリティトークンの暗号化」画面では、そのまま[次へ]ボタンを押下する。
「提供されたクレーム」画面では、そのまま[次へ]ボタンを押下する。
最後に、「概要」画面でも、そのまま[次へ]ボタンを押下して設定を完了する。
STSの設定が完了すると、ソリューションエクスプローラに以下の「FederationMetadata.xml」ファイルが作成される。
- Web.Configの設定
詳細を把握していなくて恐縮だが、Web.Configファイルに以下の修正が必要となる。以下の画像を参考にしてほしい。
詳細な修正は以下の二つとなる。
-
- appSettingsタグ内に以下の修正。
<add key="enableSimpleMembership" value="false" /> <add key="autoFormsAuthentication" value="false" />
-
- system.webに以下を追加(既存の場合は変更)
<authorization> <deny users="?" /> </authorization> <httpRuntime requestValidationMode="2.0" />
- ポートを指定
ASP.NET MVCプロジェクトを右クリックして[プロパティ]メニューを選択し、[Web]タブの「Visual Studio 開発サーバを使用する」にて、「ポートを指定する」を選択する。当該プロパティ値を以下の例に従って「63000」に設定する。
- アプリケーションの実行
ようやく、Visual Studio上でF5を押してアプリケーションを起動できる。以下の認証画面が表示されるので、お好みの認証方式を選択する(今回はGoogleにしてみる)。
参考サイト
*1:ADFS等とも連携できるため、汎用性が非常に高い