46
1 クククククククククククククククク クククククククククククククククク

3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

Embed Size (px)

DESCRIPTION

[構築作業 中編] アプリケーション編 5. クレーム対応アプリとは? 6. クレーム対応アプリの作成と展開 ~ オンプレミス編 - 展開先 IIS の準備 - 開発環境の準備 - アプリケーションの開発 - IIS にアプリを展開

Citation preview

Page 1: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

1

クレーム対応アプリケーションとはクレーム対応アプリケーションとは

Page 2: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

2

「認証の分離」とその限界

アプリケーションアプリケーションアプリケーションアプリケーション

アプリケーションアプリケーションアプリケーションアプリケーション

これまでの方式

これまでの方式

多くのアプリケーションが「認証」を分離してきたが…

Page 3: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

3

「認証分離」の限界• 認証プロトコルの違い• Identity 管理ポリシーの違い• アプリケーション側の対応• Single Sign-On/Off への適用

Active Directory

プロトコル

アプリ 1

プロトコル

情報の整形

OpenLDAP

プロトコル

情報の解釈

アプリ 2

プロトコル

情報の解釈

強い絆強い絆

強い絆強い絆

強い絆強い絆強い絆強い絆

情報の整形

情報情報

情 報情 報

情報

情報

情報

情報

情報情報

情報情報

Page 4: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

4

解決への考察• フェデレーション信頼による素結合• STS によりアプリケーション側の処理を削減• 情報はセキュリティトークンに格納して受け渡し

STS

STS

STS

STS

STS

STS

STS

STS

Active Directory

プロトコル

アプリ 1

プロトコル

情報の整形

OpenLDAP

プロトコル

情報の解釈

アプリ 2

プロトコル

情報の整形

情報の解釈

情報情報

情 報情 報

情報

情報

情報

情報

情報情報

情報情報

プロトコル

プロトコル

プロトコル

プロトコル

フェデレーション信頼

Page 5: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

5

WIFWIFAD FS 2.0AD FS 2.0

AD FS 2.0 と WIF の役割

STS

STS

STS

STSActive

Directory

プロトコル

アプリ 1

プロトコル

情報の整形

情報の解釈

情報情報

情 報情 報

情報

情報

プロトコル

プロトコル

信頼

• AD FS 2.0 がユーザーのロールを管理• アプリケーションは受け取ったロールを解釈するだけ

WIF : Windows Identity Foundation

Page 6: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

6

認証 /ロール管理からの分離

アプリケーションアプリケーションアプリケーションアプリケーション

アプリケーションアプリケーションアプリケーションアプリケーション

アプリケーションアプリケーションアプリケーションアプリケーション

これまでの方式

これまでの方式

クレー

ムに対応

クレー

ムに対応

Page 7: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

7

ブラウザー

WIF アプリケーションの構造• WIF (Windows Identity Foundation) を使用して

セキュリティー トークンからクレームを取り出す• WIF は WS-Federation/WS-Trust をサポート

ASP.NET

Windows Identity Foundation

.NET Framework 4

トー

クン

AD FS 2.0クレームの評価

ロール判定

各種処理

ロールは既にトークンにセットされているので

評価するだけで OK

Page 8: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

8

クレームの構造と識別方法

Claims

Claim ClaimType

Value

Issuer

OriginalIssuer

ValueType

これらの値でクレームを識別する

subject

Claim

Claim

Claim

Microsoft.IdentityModel.Claimshttp://msdn.microsoft.com/ja-jp/library/microsoft.identitymodel.claims.aspx

Page 9: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

9

サポートされているプロトコルとトークン形式

• パッシブ SAML WebSSO– SAML 2.0 トークン

• パッシブ WS-Federation– SAML 1.1 トークン

• アクティブ WS-Trust (CardSpace 対応含む )– SAML 2.0 トークン– SAML 1.1 トークン

AD FS 2.0 WIF

Page 10: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

10

クレーム対応アプリケーションの作成と展開クレーム対応アプリケーションの作成と展開~ オンプレミス 編~ オンプレミス 編

まずは オンプレミスの まずは オンプレミスの IISIIS に展開してみるに展開してみる

1. 展開先サーバーの準備2. 開発環境の準備3. アプリケーションの開発4. AD FS 2.0 との信頼関係確立5. アプリケーションの展開

Page 11: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

11

実施手順1. 展開先サーバーの準備

① アプリケーション展開先の IIS をセットアップa. IIS インストールb. WIF ランタイムc. WIF SDK

② 自己署名証明書の作成③ SSL を有効にする④ アプリケーションプールを作成

2. 開発環境の準備① Visual Studio のインストール② Windows Identity Framework ランタイム のインストール③ Windows Identity Framework SDK のインストール④ WIF 対応アプリケーション用テンプレートを複製

3. アプリケーションの開発① Visual Studio 起動② “Claims-Aware ASP.NET” テンプレートを選択③ AD FS 2.0 との信頼関係を確立

a. アプリケーション側の作業④ コーディング

4. アプリケーションの展開① IIS にアプリケーションを発行② AD FS 2.0 との信頼関係を確立

① AD FS 2.0 側の作業

済済

Page 12: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

12

展開先サーバーの準備クレーム対応アプリケーションの作成と展開~ オンプレミス 編

Page 13: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

13

展開先サーバーの準備~ 自己署名証明書の作成

Page 14: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

14

展開先サーバーの準備~ SSL を有効にする

Page 15: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

15

展開先サーバーの準備~ アプリケーションプールの作成

Page 16: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

16

開発環境の準備クレーム対応アプリケーションの作成と展開~ オンプレミス 編

Page 17: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

17

事前にインストールしておくものWindows 7 + Visual Studio 2010 の場合

•Windows Azure Tools for Microsoft Visual Studio 1.2 ( 2010 年 6 月)– VSCloudService.exe– VSCloudService.VS100.ja-jp.msi (言語パック)※Windows Azure SDK 1.2 も一緒にインストールされます

•Windows Identity Foundation 3.5 ランタイム 日本語版( KB974495 )– Windows6.1-KB974405-x64j.msu

•Windows Identity Foundation 3.5 日本語版– WindowsIdentityFoundation-SDK-3.5.msi

•Windows Identity Foundation 4.0 英語版– WindowsIdentityFoundation-SDK-4.0.msi

•Microsoft CAPICOM 2.1.0.2 SDK

※自己署名証明書を作成する場合に必要

Page 18: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

18

< マイドキュメント >\Visual Studio 2010\Templates\Project Templates\Visual C#

%Program Files(x86)%\Windows Identity Foundation SDK\v4.0\Visual Studio Extensions\10.0├ csClaimsAwareASPNETSite.zip├ csClaimsAwareWCFSite.zip├ csSTSASPNETSite.zip└ csSTSWCFSite.zip

コピー

WIF を使用するためのテンプレートが追加され

WIF 対応アプリケーション用テンプレートを複製

Page 19: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

19

アプリケーションの開発クレーム対応アプリケーションの作成と展開~ オンプレミス 編

Page 20: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

20

管理者として VS を実行

OR

Page 21: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

21

“Claims-Aware ASP.NET” テンプレートを選択

[ ファイル ]-[ 新規作成 ]-[Web サイト ][Visual C#] を選択

IIS 7.5 では FPSE が使えないので

とりあえずローカルに作成あとで IIS に発行する

IIS 7.5 では FPSE が使えないので

とりあえずローカルに作成あとで IIS に発行する

Page 22: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

22

Claims-Aware ASP.NET テンプレート の外観

Page 23: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

23

Claims-Aware ASP.NET テンプレートの Web.config (抜粋)

<add name="ClaimsPrincipalHttpModule" type="Microsoft.IdentityModel.Web.ClaimsPrincipalHttpModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler“ />

Page 24: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

24

Claims-Aware ASP.NET テンプレートの default.aspx.cs (抜粋)

IClaimsPrincipal claimsPrincipal = Page.User as IClaimsPrincipal;IClaimsIdentity claimsIdentity = ( IClaimsIdentity )claimsPrincipal.Identity;(略) foreach ( Claim claim in claimsIdentity.Claims ) { newRow = new TableRow(); newClaimTypeCell = new TableCell(); newClaimTypeCell.Text = claim.ClaimType;

newClaimValueCell = new TableCell(); newClaimValueCell.Text = claim.Value;

newRow.Cells.Add(newClaimTypeCell); newRow.Cells.Add(newClaimValueCell);

claimsTable.Rows.Add(newRow); }

今回はこのコードをそのまま使います

Page 25: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

25

customErrors mode=“0ff”

デバッグしやすいように以下の対応をしておきましょう

Page 26: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

26

AD FS 2.0 との信頼関係確立クレーム対応アプリケーションの作成と展開~ オンプレミス 編

Page 27: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

27

RP/SPRP/SPIdP/CPIdP/CP

AD FS 2.0 との信頼関係について

信頼信頼 MetadatMetadataa

MetadatMetadataaURIURI URIURI

精神的にはIdP 側 の Identity/Role 管理責任を信頼RP 側の クレーム管理責任を信頼

物理的にはメタデータ /証明書 /暗号化キーを事前に交換

お互いの「すり替わり」を防止データの横取りを防止

「信頼」とは何か?

Page 28: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

28

「アプリケーション側」の設定 ①

プロジェクトを右クリック - [STS 参照の追加 ]

「 AD FS 2.0 のメタデータを取り

込む」

「 AD FS 2.0 のメタデータを取り

込む」

Page 29: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

29

「アプリケーション側」の設定 ②

展開後のアプリケーションのURL

展開後のアプリケーションのURL

フェデレーションユーティリティ が起動する

Page 30: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

30

「アプリケーション側」の設定 ③

「既存の STS を使う」に AD FS 2.0 のメタデータを指定する

「 https://tfadfs.tf.com/ 」まで入力してクリックすると自動的に補完

「 https://tfadfs.tf.com/ 」まで入力してクリックすると自動的に補完

指定するのは NLB クラスターのホスト名https://tfadfs.tf.com/ ~

Page 31: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

31

「アプリケーション側」の設定 ④

今回は自己発行証明書なので「チェック

しない」

Page 32: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

32

「アプリケーション側」の設定 ⑤

IIS の SSL 証明書が使われる

Page 33: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

33

「アプリケーション側」の設定 ⑥AD FS 2.0 のメタデータに記載されている、「必須な」「使用可能な」クレームタイプの一覧が表示される

AD FS 2.0 で用意されたFederationMetadata.xml (抜粋)

AD FS 側の都合で変更される可能性があ

Page 34: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

34

「アプリケーション側」の設定 ⑦

AD FS 2.0 のメタデータを定期的に取り込むかどうかを指定する

Page 35: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

35

「アプリケーション側」の設定 ⑧

STS参照追加後のプロジェクト

アプリ自身のメタデータが生成される

AD FS 2.0 側に取り込む必要がある※ AD FS 2.0 のメタデータではな

アプリ自身のメタデータが生成される

AD FS 2.0 側に取り込む必要がある※ AD FS 2.0 のメタデータではな

取り込んだ AD FS 2.0 用メタデータをもとに、AD FS 2.0 と通信し認証 /承認 するための定義が大量に追記されている

取り込んだ AD FS 2.0 用メタデータをもとに、AD FS 2.0 と通信し認証 /承認 するための定義が大量に追記されている

Page 36: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

36

IIS にアプリケーションを展開クレーム対応アプリケーションの作成と展開~ オンプレミス 編

Page 37: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

37

IIS にアプリケーションを発行 ①

(注意)この操作ではファイルがコピーされるだけ。別途 IIS上でアプリケーションの設定が必要

Page 38: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

38

IIS にアプリケーションを発行 ②( IIS 側での操作)

発行したファイルをアプリケーションに変換する

Visual Studio から複製したファイル群Visual Studio から複製したファイル群

Page 39: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

39

IIS にアプリケーションを発行 ③

事前に作成しておいたアプリケーションプールを選択

する

事前に作成しておいたアプリケーションプールを選択

する

アイコンに注目アイコンに注目

Page 40: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

40

アプリとの信頼関係の確立( AD FS 2.0 側) ①

証明書利用者信頼( RP/SP )の登録

[AD FS 2.0 管理コンソール ] - [AD FS 2.0] - [ 信頼関係 ] - [ 証明書利用者信頼 ] を右クリックして [ 証明書利用者信頼の追加 ] を選択

Page 41: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

41

アプリとの信頼関係の確立( AD FS 2.0 側) ②

発行したアプリケーションの FederationMetadata.xml ファイルのフルパスを指定する

発行したアプリケーションの FederationMetadata.xml ファイルのフルパスを指定する

Page 42: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

42

アプリとの信頼関係の確立( AD FS 2.0 側) ③

ホストしているサーバー名とアプリケーション名が分かるようにしてあると吉ホストしているサーバー名とアプリケーション名が分かるようにしてあると吉

「発行承認規則」(後述)の初期値。

最初は制限を付けないほうが良い。

「発行承認規則」(後述)の初期値。

最初は制限を付けないほうが良い。

Page 43: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

43

アプリとの信頼関係の確立( AD FS 2.0 側) ④

Page 44: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

44

実行してみる

AD FS 2.0 側ではクレームの定義を何もしていないため、既定のクレームのみが表示されている•認証メソッド•認証日時

AD FS 2.0 側ではクレームの定義を何もしていないため、既定のクレームのみが表示されている•認証メソッド•認証日時

Page 45: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

45

エラーが出たら ①

HTTP エラー 500.21 - Internal Server Errorハンドラ "PageHandlerFactory-Integrated" のモジュール リストにあるモジュール "ManagedPipelineHandler" が正しくありません。

可能性のある原因 :ASP.NET がインストールされていないか、完全にインストールされていません。 構成に誤字があります。 不適切な必須条件評価が存在します。

HTTP エラー 500.21 - Internal Server Errorハンドラ "PageHandlerFactory-Integrated" のモジュール リストにあるモジュール "ManagedPipelineHandler" が正しくありません。

可能性のある原因 :ASP.NET がインストールされていないか、完全にインストールされていません。 構成に誤字があります。 不適切な必須条件評価が存在します。

不明な属性です

<compilation debug="true" targetFramework="4.0"><assemblies></assemblies>

</compilation>

不明な属性です

<compilation debug="true" targetFramework="4.0"><assemblies></assemblies>

</compilation>

C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

対処法: ASP.NET 4.0 を登録する

C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

x86

x64

Page 46: 3/5 ADFS 2.0 を使用して Windows Azure との SSO を実現しよう V1.1

46

エラーが出たら ②

対処法:作成したアプリケーションのアプリケーションプールの設定を変更する

TRUE に設定TRUE に設定