Windows Identity Foundation の概要

WIF のロゴ

Windows® Identity Foundation (WIF) は ID 対応のアプリケーションを構築するためのフレームワークです。 このフレームワークは、WS-Trust プロトコルと WS-Federation プロトコルを抽象化し、セキュリティ トークン サービスと要求に対応したアプリケーションを構築するための API を開発者に提供します。 アプリケーションでは、WIF を使用して、セキュリティ トークン サービスから発行されたトークンを処理し、Web アプリケーションまたは Web サービスで ID ベースの決定を下すことができます。

WIF の主要な機能は次のとおりです。

  • 要求に対応するアプリケーション (証明書利用者アプリケーション) の構築。開発者は WIF を使用して、要求に対応するアプリケーションを効率よく作成できます。 新しい要求モデルだけでなく、要求に基づいたユーザー アクセスの決定に役立つ豊富な API セットがアプリケーション開発者に提供されます。また、アプリケーションの構築に ASP.NET 環境と WCF 環境のどちらを選択しても、WIF では一貫した操作性でプログラムを記述できます。 詳細については、「要求の利用者: 証明書利用者アプリケーション」を参照してください。

  • Visual Studio テンプレート。 WIF には、要求に対応する ASP.NET Web サイトおよび WCF Web サービス アプリケーション用の組み込みの Visual Studio テンプレートが用意されているため、要求ベースのプログラミング モデルを短期間で習得することができます。 詳細については、「Visual Studio テンプレート」を参照してください。

  • 要求に対応するアプリケーションと STS の間の信頼の容易な確立。 WIF には、FedUtil という名前のユーティリティが用意されています。これを使用すると、要求に対応するアプリケーションと STS (Active Directory フェデレーション サービス 2.0、LiveID STS など) との間で信頼を簡単に確立できます。 FedUtil は、ASP.NET と WCF の両方のアプリケーションをサポートします。 また、Visual Studio に統合されるため、ソリューション エクスプローラーでプロジェクトを右クリックし、[STS 参照の追加] メニュー項目をクリックして呼び出すか、または Visual Studio の [ツール] メニューから呼び出すことができます。 詳細については、「FedUtil: RP から STS への信頼を確立するためのフェデレーション ユーティリティ」を参照してください。

  • ASP.NET コントロール。ASP.NET コントロールを使用すると、要求に対応する Web アプリケーションを構築するための ASP.NET ページの開発を簡略化できます。 詳細については、「FederatedPassiveSignIn コントロールを使用した ASP.NET 証明書利用者アプリケーションから STS への信頼の確立」を参照してください。

  • 要求と NT トークンとの間の変換。 WIF には、 という名前の Windows サービスが用意されています。これは、要求に対応するアプリケーションと NT トークン ベースのアプリケーションとの間のブリッジとして機能します。 このサービスを使用すると、要求を NT トークン ID に簡単に変換し、要求に対応するアプリケーションから、NT トークン ベースの ID が必要なリソースにアクセスできます。 詳細については、「Claims to Windows Token Service (c2WTS) の概要」を参照してください。

  • 要求に対応するアプリケーションの ID 委任のサポートの構築。 WIF には、複数のサービスの境界を越えて元の要求元の ID を保持する機能が用意されています。 この機能は、フレームワークの "ActAs" 機能または "OnBehalfOf" 機能を使用することで有効にできます。開発者は、この機能を使用して、ID 委任のサポートを要求に対応するアプリケーションに追加することができます。 詳細については、「IIdentity および IPrincipal との統合」および「ID 委任のシナリオ」を参照してください。

  • カスタム セキュリティ トークン サービス (STS) の構築。 WIF では、WS-Trust プロトコルをサポートするカスタム セキュリティ トークン サービス (STS) を非常に簡単に構築できます。 これらの STS は、"アクティブ STS" とも呼ばれます。

    また、フレームワークでは、Web ブラウザー クライアントを有効にする WS-Federation をサポートする STS の構築もサポートしています。 これらの STS は、"パッシブ STS" とも呼ばれます。

    フレームワークには、ASP.NET STS および WCF STS を構築するための組み込みの Visual Studio テンプレートが用意されています。テンプレートから作成されるのは単純な STS ですが、開発者はこれらの STS を拡張することによって、各自の要件を満たした運用 STS を実装できます。 詳細については、「ASP.NET STS を構築する方法」および「WCF STS を構築する方法」を参照してください。

WIF がサポートする主要なシナリオを次に示します。

  • フェデレーション。WIF では、複数のパートナー間にフェデレーションを構築できます。 要求に対応するアプリケーション (RP) およびカスタム セキュリティ トークン サービス (STS) を構築するために用意されている機能を使用して、このシナリオを実現できます。 詳細については、「フェデレーションのシナリオ」を参照してください。

  • ID の委任。 WIF では、サービスの境界を越えて ID を保持できるため、ID 委任のシナリオを簡単に実現できます。 詳細については、「ID 委任のシナリオ」を参照してください。

  • ステップアップ認証。 同じアプリケーション内でも、認証の要件がリソースによって異なる場合があります。 WIF では、認証要件を段階的に厳しくするようなアプリケーションを構築できます (最初はユーザー名とパスワード認証でログインし、次にスマート カード認証にステップアップするなど)。 詳細については、「ステップアップ認証のシナリオ」を参照してください。

このトピックで取り上げる要求ベースのID モデルは、WIF を使用することによって簡単に活用することができます。 このトピックでは、Windows® Identity Foundation (WIF) が備える新しい要求処理の機能を大まかに説明します。 詳細については、Windows Identity Foundation の開発者向けホワイト ペーパーを参照してください。

Thread.CurrentPrincipal を介した要求へのアクセス

RP アプリケーションから現在のユーザーの一連の要求にアクセスするには、Thread.CurrentPrincipal を使用します。

次のコード サンプルは、このメソッドを使用して IClaimsIdentity を取得する方法を示しています。

IClaimsIdentity claimsIdentity = ((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0];

詳細については、「ASP.NET ページで要求にアクセスする方法」を参照してください。

要求の種類としての役割

RP アプリケーションを構成する際には、要求の種類としての役割を決める必要があります。 この要求の種類は IsInRole で使用されます。 既定の要求の種類は http://schemas.microsoft.com/ws/2008/06/identity/claims/role です。

Windows Identity Foundation が各種のトークンから抽出する要求

WIF は、さまざまな認証メカニズムの組み合わせを標準でサポートしています。 WIF がさまざまなトークンの種類から抽出する要求の一覧を次の表に示します。

トークンの種類

生成される要求

Windows アクセス トークンへのマッピング

SAML 1.1

  1. GetOutputClaimsIdentity からのすべての要求。

  2. XML シリアル化された確認キーを含んだ http://schemas.microsoft.com/ws/2008/06/identity/claims/confirmationkey 要求 (トークンに証明トークンが含まれている場合)。

  3. Issuer 要素からの http://schemas.microsoft.com/ws/2008/06/identity/claims/samlissuername 要求。

  4. AuthenticationMethod および AuthenticationInstant 要求 (トークンに認証ステートメントが含まれている場合)。

"SAML 1.1" にリストされている要求 (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name タイプの要求を除く) に加え、Windows 認証関連の要求が追加され、WindowsClaimsIdentity によって ID が表されます。

SAML 2.0

"SAML 1.1" と同じ。

"Windows アカウントにマッピングされた SAML 1.1" と同じ。

X509

  1. X509 証明書の X500 識別名、emailName、dnsName、SimpleName、UpnName、UrlName、thumbprint、RsaKey (RSACryptoServiceProvider.ExportParameters メソッドを使用して X509Certificate2.PublicKey.Key プロパティから抽出可能)、DsaKey (DSACryptoServiceProvider.ExportParameters メソッドを使用して X509Certificate2.PublicKey.Key プロパティから抽出可能)、SerialNumber の各プロパティを持つ要求。

  2. http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/x509 という値を持つ AuthenticationMethod 要求。 証明書が検証された時刻を XMLSchema DateTime 形式の値として持つ AuthenticationInstant 要求。

  1. http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 要求値として、Windows アカウントの完全修飾ドメイン名が使用されます。 .

  2. Windows にマッピングされていない X509 証明書からの要求、および証明書を Windows にマッピングすることによって取得された Windows アカウントからの要求。

UPN

  1. Windows 認証セクションの要求と似た要求。

  2. http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password という値を持つ AuthenticationMethod 要求。 パスワードが検証された時刻を XMLSchema DateTime 形式の値として持つ AuthenticationInstant 要求。

 

Windows (Kerberos または NTLM)

  1. PrimarySID、DenyOnlyPrimarySID、PrimaryGroupSID、DenyOnlyPrimaryGroupSID、GroupSID、DenyOnlySID、Name などのアクセス トークンから生成された要求。

  2. http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/ という値を持つ AuthenticationMethod と、認証 SSp (Kerberos、NTML、Negotiate など) の名前を小文字にしたもの。 Windows アクセス トークンが作成された時刻を XMLSchema DateTime 形式の値として持つ AuthenticationInstant。

 

RSA キー ペア

  1. RSAKeyValue という値を持つ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa 要求。

  2. http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/signature という値を持つ AuthenticationMethod 要求。 RSA キーが認証された (つまり、署名が検証された) 時刻を XMLSchema DateTime 形式の値として持つ AuthenticationInstant 要求。

認証の種類

"AuthenticationMethod" 要求で出力される URI

Password

urn:oasis:names:tc:SAML:1.0:am:password

Kerberos

urn:ietf:rfc:1510

SecureRemotePassword

urn:ietf:rfc:2945

TLSClient

urn:ietf:rfc:2246

X509

urn:oasis:names:tc:SAML:1.0:am:X509-PKI

PGP

urn:oasis:names:tc:SAML:1.0:am:PGP

Spki

urn:oasis:names:tc:SAML:1.0:am:SPKI

XmlDSig

urn:ietf:rfc:3075

Unspecified

urn:oasis:names:tc:SAML:1.0:am:unspecified