実際の流れは下記の通りです。(今回はWindows7上のIIS7.5をアプリケーションサーバとして利用しています)
1.WIFを使ったClaimベースのWebアプリケーションを作成する
2.STSへのRelying Partyの設定
3.動作確認
では、それぞれのステップについて手順を見ていきます。
1.WIFを使ったClaimベースのWebアプリケーションを作成する
ADFS2.0を使ったPassiveFederationを行う場合、アプリケーション(Relying Party)はSSLが有効化されている必要があるため、手順書は省略しますがあらかじめローカルのIISでSSLが使える状態にしてく必要があります。(今回、アプリケーションのデプロイ先をDefault Web Siteにしましたので、あらかじめ作成した自己署名入り証明書をhttpsバインドに設定しました)
では、早速アプリケーションの実装を行います。必要となるのは以下のステップです。
・参照設定の追加
・STS参照の追加
・アプリケーションの実装
・アプリケーションの発行
まずはVisual Studioを管理者として実行します。(STS参照の追加をするためには管理者権限が必要です)
次に新しいプロジェクトを以下の通り作成します。
項目 | 値 | 備考 |
プロジェクト名 | onpremise_pasvfed | もちろん任意 |
プロジェクトの種類 | Visual C# → Web | もちろん言語は任意 |
テンプレート | ASP.NET Webアプリケーション |
プロジェクトが起動してきたらソリューションエクスプローラよりWIFへの参照を追加します。追加するコンポーネントはMicrosoft.IdentityModelです。
次にSTSへの参照を追加します。
同じくソリューションエクスプローラからソリューションを右クリックして出てくる「Add STS reference」メニューをクリックします。
※Add STS referenceが出てこない場合は管理者としてVisual Studioを実行してみてください。
Federation Utilityが起動してきますので、以下の通り値を設定します。
STS側でも自己署名入りの証明書を使っているので途中証明書チェーンの確認で警告が出ますが続行してください。
ステップ | 設定項目 | 設定値 | 備考 |
Welcome | Application configuration location | プロジェクトのweb.configファイル | 初期状態で指定されているので変更不要 |
Application URI | https://windows7.eidentity.local/onpremise_pasvfed/ | 発行先となるURIを指定 | |
Security Token Service | Security Token Service (STS) option | Use an existing STS | 既に作成したADFS2.0をSTSとして指定 |
STS WS-Federation metadata document location | https://adfs20.eidentity.local/FederationMetadata/2007-06/FederationMetadata.xml | ADFS2.0のMetadataのエンドポイントを指定 | |
STS signing certificate chain validation error | Certificate validation option | Disable certificate chain validation | STSが自己署名入り証明書を使っているため、証明書チェーンの確認を無効化する |
Security Token encryption | Security Token encryption option | No encryption |
ユーティリティが終了するとソリューションエクスプローラにFederationMetadata.xmlが追加されているのと、Web.configの内容がSTSを参照する形に変更されます。
次はいよいよアプリケーションの実装を行います。
今回はSTSによって発行されるセキュリティトークンからname属性のClaimを取り出して画面上のラベルに表示する、というアプリケーションを実装します。
実装するコードは下記の通りです。Page_load時にトークンからClaimを取り出してClaimTypeがnameならば値を画面上のラベルに表示します。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.IdentityModel.Claims; using System.Threading; namespace onpremise_pasvfed { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { IClaimsIdentity caller = (IClaimsIdentity)Thread.CurrentPrincipal.Identity; foreach (Microsoft.IdentityModel.Claims.Claim c in caller.Claims) { if (c.ClaimType == Microsoft.IdentityModel.Claims.ClaimTypes.Name) { lbl_claim_name.Text = c.Value; break; } } } } } |
ここまでくると後はアプリケーションの発行だけです。今回はローカルIIS上にアプリケーションを発行しました。
ここまででアプリケーションの実装・発行は完了です。
2.STSへのRelying Partyの設定
・FederationMetadata.xmlの読み込み
・Claimのマッピングルールの設定
今度はSTS側への設定です。基本的にADFS2.0のSTSはレルム指定をしたホワイトリスト型なので、あらかじめ上記で作成したアプリケーションを指定してRelying Partyを定義しておく必要があります。
ADFS2.0の管理コンソールを開くと、「Required: Add a trusted relying party」というタスクが表示されているので、クリックしてAdd Relying Party Trust Wizardを開始します。
Wizardに設定する項目は下記の通りです。
ステップ | 設定項目 | 設定値 | 備考 |
Select Data Source | Select an option that this wizard will use to obtain data about this relying party | Import data about the relying party from a file | |
Federation metadata file location | アプリケーション側のFederationMetadata.xmlファイル | 必要であれば予めADFSサーバへプロジェクトディレクトリ以下のFederationMetadata.xmlファイルをコピーしておく | |
Specify Display Name | Display Name | https://windows7.eidentity.local/onpremise_pasvfed/ | |
Choose Issuance Authorization Rules | Relying party's issuance authorization rule | Permit all users to access this relying party |
Wizardが終わると、Claimマッピングのルールエディタが起動しますので、ルールを追加していきます。
Add Ruleボタンをクリックすると、Add Transform Claim Rule Wizardが起動してきますので、下記の通り値を設定します。
ステップ | 設定項目 | 設定値 | 備考 |
Choose Rule Type | Claim rule template | Send LDAP Attribute as Claims | Active Directoryの属性をクレームにマッピングします |
Configure Claim Rule | Claim rule name | onpremise_pasvfed | 任意です |
Attribute store | Active Directory | ||
LDAP Attribute | SAM-Account-Name | ペアでマッピングさせます | |
Outgoing Claim Type | Name |
これで一応アプリケーションもSTSも準備が整いましたので、最後に動作確認を行います。
3.動作確認
早速アプリケーションにアクセスしてみます。ブラウザから「https://windows7.eidentity.local/onpremise_pasvfed/」にアクセスします。
STSであるadfs20.eidentity.localへリダイレクトされますので、ドメインユーザで認証を受けます。
再度リダイレクトされ、アプリケーションが表示され、claim(name)が正しく取得できていることが分かります。
今回はオンプレミス環境でWIF/ADFS2.0を使ったClaimベースのWebアプリケーションを実装しましたが、次回はいよいよAzure上で同様のアプリケーションを実行してみます。
0 件のコメント:
コメントを投稿