normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

C# AdventCalender jp:2010最終日!Access Controlを利用したASP.NET MVC3 RC2アプリのシングルサイオン(SSO)!! 〜その1〜

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等とも連携できるため、汎用性が非常に高い