■サンプルの内容
このサンプルでは AppFabric ACS を OAuth の認可サーバとして利用し、Contoso Customer Information サービスから顧客情報をユーザの同意に基づき取得する、というシナリオです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiZiaiRXs-CxQPrEkuONjVl6qJAlatnen5BDJFvueb2-6Qo5zns2Q2V5OM1_n_Rvsjkfty_U-iVtkPzza4V0HFOnqb67UpxUFrwx5pxsBKwza3SqEZLfOPbvFaLoAu9kbmO-2_fYutIg/s320/1.sample.jpg)
登場するコンポーネントは、
・ユーザ:ブラウザ
・コンシューマ: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.コンシューマは取得したリソースをユーザへ返す
図示すると以下の様な形になります。
・ユーザ:ブラウザ
・コンシューマ: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.コンシューマは取得したリソースをユーザへ返す
図示すると以下の様な形になります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZbWwrp1FZ6PX4_XMsX4NRk8Ff52EVxVKBVQZl-wXSghb8v0wSjOx5mFY22MO4vnQv7OCuUAzyYqf1mv5fqwiYrJg8Iv1gBNsYydLwd_A-0Uqhhf2siARr1w2btmCfnFuc0wGH2_P3JqI/s320/2.flow.jpg)
■サンプルのセットアップ準備
早速ですがサンプルをセットアップしてみます。まずは必要物をそろえます。
現在 CTP 版のモジュールは connect サイトでダウンロードできます。
ダウンロードURL:https://connect.microsoft.com/site1168/Downloads
また、前提となる環境は以下の通りです。
PC(私は Windows 7 x64 を利用しました)
・IIS
・Visual Studio 2010
Windows Azure AppFabric Access Control Service
・v2 で適当な名前空間を一つ
早速ですがサンプルをセットアップしてみます。まずは必要物をそろえます。
現在 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
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinLx76K5xdb749B6J_jIq6XvS41YgXrodj2r2YmmNcKZPGrKt4m0UwAKtw17flBeeeSQGrO6FYzy20-pm1AsiF8QfzdKLaAYkJmGGOEy0t4SZXKOyZTtguYFbJxRv5gTNpMh8FU1Hm994/s320/3.ServiceID.jpg)
2.ACS へ証明書利用者アプリケーションを追加する
同じく ACS より Relying Party ( 証明書利用者アプリケーション ) を追加します。
証明書利用者アプリケーションの設定
名前:Customer Information Service
領域:http://contoso/CustomerInformationService/
戻り先URL:http://localhost/
トークン形式:SWT
認証の設定
IDプロバイダー:チェックを外す
トークン署名キー
生成 をクリックして生成する
同じく 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で設定した証明書利用者アプリケーションのトークン署名キーの値
次は先ほどのダウンロードしたモジュールを解凍した中にある「OAuth with ACS.sln」を管理者として開き、以下の設定を行います。
・SamplesConfiguration.cs の編集
ServiceNamespace : ACS の名前空間
ManagementServiceIdentityKey : 管理サービスの ManagementClient の資格情報の対象キーの値
RelyingPartySigningKey : 2で設定した証明書利用者アプリケーションのトークン署名キーの値
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGPuXX86Apv9jVF2ob2oXYuwIIelDwWw0OnTgdLh2XRNd_4aejYV4wmIsVIwMigIB50fLNFc5L5Q8jdnL4C00GKZlkkF41k_ByLJvuGyINSX7AHLzcQEMEDdZNpXXzVWD6rln0Sywq-vc/s320/6.Configuration.jpg)
・ソリューションエクスプローラから ConfigureAcsConsoleApplication を右クリックして「デバッグ -> 新しいインスタンスを開始」をクリック
→ コンソールが起動するので、 Press any key to exit と表示されたら何かキーを押してアプリケーションを閉じる
※このコンソールアプリケーションが ACS の IdP 設定などを行います。
→ コンソールが起動するので、 Press any key to exit と表示されたら何かキーを押してアプリケーションを閉じる
※このコンソールアプリケーションが ACS の IdP 設定などを行います。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiILHoT-Ne0G_5PDYc49mS8sNF9N0-Pm3tKfcWdUMjr9IgyoNYt9MWU02lj7r60F65ttlI5EPi6ILLw0r4Kly5XyeraG8uH9vX8qmeYaORiHk7FdgSiEFdQXdr-O6tksgWcovekHXQb4tU/s320/7.console.jpg)
・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 をクリックする
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 をクリックする
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNzhuWDGK8_FXNYb7FnDBl5qJMzWl1ubA9lGvZH2SCSkW9iajqz9lW1mY-kUVUa-J1ee9KOdYgvW_aYftFDE5iZK5jA0jJ3SaP1VBfzpY5m0SUeuyd9_NzN3Ol_Bf3Rqc29qV2aoi0UwI/s320/8.fabrikam.jpg)
2.CONTOSO CUSTOMER INFORMATION SERVICE へログオンする
ログオン画面へリダイレクトされるので
・User Name : john
・Password : password
を入力してログインする
ログオン画面へリダイレクトされるので
・User Name : john
・Password : password
を入力してログインする
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsoH12o0Cd0v0yOitsnn7bur13aq6-XXc182aXyZIc9Gr23tpL9oLcWV2qjM0XU3z563yESa7RhNdAVHEe1ATjkHH-Cs9DJ0CkNWX2-iokC6RsFJI9VnlQuqINfnqUsYoNOA8PxQWnpag/s320/9.login.jpg)
いかがでしょうか? SAML もそうですが、OAuth もやはり実際の動きを見てみないと動きのイメージがつかないものだと思いますので、イメージをつかむためにも一度実際に動くものを見てみるのが理解を早めると思います。一度是非試してみてください。
0 件のコメント:
コメントを投稿