2011年8月23日火曜日

WIF Extension for OAuth CTP1 を試してみる

4月にリリースされてからしばらく時間がたちますが、Windows Identity Foundation Extension for OAuth CTP 1-4(WIF Extension for OAuth)の中に入っているサンプルを動かしてみたいと思います。


■サンプルの内容
このサンプルでは AppFabric ACS を OAuth の認可サーバとして利用し、Contoso Customer Information サービスから顧客情報をユーザの同意に基づき取得する、というシナリオです。













登場するコンポーネントは、

・ユーザ:ブラウザ
・コンシューマ:Fabrilam Information Portal(WIF Extension for OAuth を利用したクライアント)
・認可サーバ:ACS2.0
・リソースサーバ:Contoso Customer Information Service(WIF Extension for OAuth を利用した OAuth Protection モジュール)

の4つで、各コンポーネントのアクセスフローは以下の通りです。
1.ユーザがコンシューマへアクセスする
2.コンシューマはリソースサーバのログオンページへリダイレクトする
3.ユーザはIDとパスワードでリソースサーバで認証を受ける
4.ユーザはリソースへのアクセスに関する同意を行う
5.リソースサーバは認可サーバから認可コードを取得する
6.リソースサーバは認可コードをコンシューマへ渡す
7.コンシューマは認可コードを元に認可サーバからアクセストークンとリフレッシュトークンを取得する
8.コンシューマはアクセストークンをリソースサーバへ渡しリソースを取得する
9.コンシューマは取得したリソースをユーザへ返す

図示すると以下の様な形になります。
















■サンプルのセットアップ準備
早速ですがサンプルをセットアップしてみます。まずは必要物をそろえます。
現在 CTP 版のモジュールは connect サイトでダウンロードできます。

  ダウンロードURL:https://connect.microsoft.com/site1168/Downloads

また、前提となる環境は以下の通りです。
  PC(私は Windows 7 x64 を利用しました)
  ・IIS
  ・Visual Studio 2010
  Windows Azure AppFabric Access Control Service
  ・v2 で適当な名前空間を一つ


■サンプルのセットアップ
1.ACS へサービス ID を追加する
 ACS のサービスの設定 -> サービス ID よりサービス ID を追加し、以下の情報を設定します。

 サービス ID の設定
  名前:FabrikamClient
 資格情報の設定
  型:パスワード
  パスワード:FabrikamSecret






















2.ACS へ証明書利用者アプリケーションを追加する
 同じく ACS より Relying Party ( 証明書利用者アプリケーション ) を追加します。

 証明書利用者アプリケーションの設定
  名前:Customer Information Service
  領域:http://contoso/CustomerInformationService/
  戻り先URL:http://localhost/
  トークン形式:SWT
 認証の設定
  IDプロバイダー:チェックを外す
 トークン署名キー
  生成 をクリックして生成する









































3.Visual Studio でサンプル・ソリューションを開き編集する
 次は先ほどのダウンロードしたモジュールを解凍した中にある「OAuth with ACS.sln」を管理者として開き、以下の設定を行います。

・SamplesConfiguration.cs の編集
  ServiceNamespace : ACS の名前空間
  ManagementServiceIdentityKey : 管理サービスの ManagementClient の資格情報の対象キーの値
  RelyingPartySigningKey : 2で設定した証明書利用者アプリケーションのトークン署名キーの値
















・ソリューションエクスプローラから ConfigureAcsConsoleApplication を右クリックして「デバッグ -> 新しいインスタンスを開始」をクリック
  → コンソールが起動するので、 Press any key to exit と表示されたら何かキーを押してアプリケーションを閉じる
 ※このコンソールアプリケーションが ACS の IdP 設定などを行います。














・HTTPSでのアクセスを行う際のチェックを無効化する(そのままだとWeb例外「"基礎になる接続が閉じられました: SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした"」が発生する)

 WebClient の Defalut.aspx.cs の GetAllInformation メソッドの初めに以下のコードを追加する
 if (System.Net.ServicePointManager.ServerCertificateValidationCallback == null)
 {
  System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(Object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
  {
   return true;
  };
 }


・ソリューションをビルドする


■サンプルの実行
 いよいよソリューションの実行です。

1.ブラウザより https://localhost/WebClient/ へアクセスする
  画面が表示されたら Populate all data をクリックする











2.CONTOSO CUSTOMER INFORMATION SERVICE へログオンする
  ログオン画面へリダイレクトされるので
  ・User Name : john
  ・Password : password
  を入力してログインする


















3.リソースへのアクセスに関する同意を行う
  同意を求められるので Yes を選択し、Submit する












4.リソースの表示
  元の画面にリダイレクトされ、リソースが表示される















  同様にアクセストークン、リフレッシュトークンに関する情報も表示されます。











いかがでしょうか? SAML もそうですが、OAuth もやはり実際の動きを見てみないと動きのイメージがつかないものだと思いますので、イメージをつかむためにも一度実際に動くものを見てみるのが理解を早めると思います。一度是非試してみてください。

0 件のコメント: