WSFederationAuthenticationModule クラス

定義

WSFederationAuthenticationModuleは、受信要求にフェデレーション認証設定を適用することによって、ASP.NET アプリケーションをセキュリティで保護するために使用される HTTP モジュールです。 WSFederationAuthenticationModule は、ASP.NET アプリケーションでクレームベース ID によるアクセスを処理するために、WIF が独自に提供するメイン モジュールです。

WSFederationAuthenticationModule は、複数のイベントを発生させます。それらのイベントにより、ASP.NET 開発者は既定の動作を変更したり、認証やクレームの処理方法の詳細を制御したりできるようになります。 WSFederationAuthenticationModule の機能は、タスク固有のメソッドに分割されています。

public ref class WSFederationAuthenticationModule : System::IdentityModel::Services::HttpModuleBase
public class WSFederationAuthenticationModule : System.IdentityModel.Services.HttpModuleBase
type WSFederationAuthenticationModule = class
    inherit HttpModuleBase
Public Class WSFederationAuthenticationModule
Inherits HttpModuleBase
継承
WSFederationAuthenticationModule


void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup

    //SUBSCRIBE TO WSFAM EVENTS
    FederatedAuthentication.WSFederationAuthenticationModule.AuthorizationFailed += new EventHandler<AuthorizationFailedEventArgs>(WSFederationAuthenticationModule_AuthorizationFailed);
    FederatedAuthentication.WSFederationAuthenticationModule.RedirectingToIdentityProvider += new EventHandler<RedirectingToIdentityProviderEventArgs>(WSFederationAuthenticationModule_RedirectingToIdentityProvider);
    FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived += new EventHandler<SecurityTokenReceivedEventArgs>(WSFederationAuthenticationModule_SecurityTokenReceived);
    FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenValidated += new EventHandler<SecurityTokenValidatedEventArgs>(WSFederationAuthenticationModule_SecurityTokenValidated);
    FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated += new EventHandler<SessionSecurityTokenCreatedEventArgs>(WSFederationAuthenticationModule_SessionSecurityTokenCreated);
    FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += new EventHandler(WSFederationAuthenticationModule_SignedIn);
}

void WSFederationAuthenticationModule_SignedIn(object sender, EventArgs e)
{
    //Anything that's needed right after succesful session and before hitting the application code goes here
    System.Diagnostics.Trace.WriteLine("Handling SignIn event");
}

void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e)
{
    //Manipulate session token here, for example, changing its expiration value
    System.Diagnostics.Trace.WriteLine("Handling SessionSecurityTokenCreated event");
    System.Diagnostics.Trace.WriteLine("Key valid from: " + e.SessionToken.KeyEffectiveTime);
    System.Diagnostics.Trace.WriteLine("Key expires on: " + e.SessionToken.KeyExpirationTime);
}

void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e)
{
    //All vlidation SecurityTokenHandler checks are successful
    System.Diagnostics.Trace.WriteLine("Handling SecurityTokenValidated event");
}

void WSFederationAuthenticationModule_SecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e)
{
    //Augment token validation with your cusotm validation checks without invalidating the token.
    System.Diagnostics.Trace.WriteLine("Handling SecurityTokenReceived event");
}

void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e)
{
    //Use this event to report more details regarding the ahorization failure
    System.Diagnostics.Trace.WriteLine("Handling AuthorizationFailed event");
}

void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
    //Use this event to programmatically modify the sign-in message to the STS.
    System.Diagnostics.Trace.WriteLine("Handling RedirectingToIdentityProvider event");
}

注釈

クラスは WSFederationAuthenticationModule 、WS-Federation 認証モジュール (WSFAM) と呼ばれる HTTP モジュールを実装します。 WSFAM は、Windows Identity Foundation (WIF) によってすぐに実装されます。 WSFAM は、web.config ファイルにエントリを作成することで、ASP.NET パイプラインに追加されます。 から派生し HttpModuleBase、 を実装します IHttpModule。 イベントと AuthenticateRequest イベントをリッスンするために、ASP.NET ランタイムにEndRequest登録します。 イベントを EndRequest リッスンすると、WSFAM はクライアントをセキュリティ トークン サービス (STS) にリダイレクトして、要求されたリソースで承認が失敗したときにセキュリティ トークンを取得できます。 イベントを AuthenticateRequest リッスンすると、WSFAM は要求されたトークンを含む STS からの応答の HTTP 要求を監視できます。 このようなトークンが存在し、有効な場合は、トークンに存在する要求を使用して、認証されたユーザーの のインスタンス ClaimsPrincipal が作成されます。

WSFAM を使用する場合、セッション管理は、セッション認証モジュール (SAM) によって提供されます。これは、 クラスの SessionAuthenticationModule インスタンスであるか、そこから派生したクラスです。 SAM は、構成ファイルの ASP.NET パイプラインにも追加されます。 SAM は、認証 (セッション) Cookie の要求を監視します。 これらの Cookie が存在し、有効な場合、モジュールは から認証されたユーザーの をClaimsPrincipal抽出し、 プロパティとスレッド プリンシパルThread.CurrentPrincipalのプロパティを設定HttpContext.UserSessionSecurityTokenします。

WSFAM には次の機能があります。

  • WS-Federation プロトコルを使用して、ASP.NET アプリケーションが認証をセキュリティ トークン サービス (STS) に外部委託する機能。 ID は、1 つ以上の ID 領域間でフェデレーションでき、複数の STS を使用できます。

  • ASP.NET アプリケーションのクレームベースの ID。 認証時に、WSFAM は STS によって送信されるセキュリティ トークンの要求からプリンシパルを構築し、この要求プリンシパルをスレッド プリンシパルとして設定します。 その後、このプリンシパルを使用して、コード内で表されるユーザーに関する承認、プレゼンテーション、ロジックに関する決定をさらに行うことができます。

WSFAM は、サインイン要求とサインアウト要求で使用する既定のメッセージ パラメーター WS-Federation 提供するいくつかのプロパティを公開します。 これらのプロパティは、通常、構成ファイルの <wsFederation> 要素から初期化されます。 これらのプロパティの中で最も重要なものは次のとおりです。

  • プロパティ。 Issuer サインイン要求とサインアウト要求の送信先となるセキュリティ トークン サービス (STS) のアドレス WS-Federation 指定します。

  • プロパティ。 Realm サインイン要求で使用する wtrealm パラメーター WS-Federation 指定します。 wtrealm パラメーターは、STS への証明書利用者 (RP) アプリケーションのセキュリティ領域を識別します。

サインイン メッセージ パラメーターは、イベントのイベント ハンドラー デリゲート RedirectingToIdentityProvider を提供することで、要求ごとに変更することもできます。

2 つのプロパティによってモジュールの動作が制御されます。 これらのプロパティはどちらも、通常、構成の <wsFederation> 要素から初期化されます。

  • プロパティは PassiveRedirectEnabled 、認証のためにモジュールが STS へのパッシブ リダイレクトを実行するかどうかを指定します。

  • プロパティは PersistentCookiesOnPassiveRedirects 、セッションを永続的にするかどうかを指定します。 このプロパティが true に設定されている場合、SAM はセッション Cookie をクライアントに書き込むのに使用されます。 クライアントからの後続の要求では、SAM はセッション Cookie に保持されているトークンを使用して認証を提供します。

WSFAM では、サインインとサインアウト中に複数のイベントが発生します。これにより、ASP.NET 開発者はモジュールの既定の動作を変更し、認証と要求の処理の実行方法の詳細を制御できます。

WS-Federation サインイン要求が STS に送信される前に、次のイベントが発生します。

  • AuthorizationFailed: パッシブ リダイレクトが有効で、要求されたリソースで承認が失敗したときに発生します。

  • RedirectingToIdentityProvider: WSFAM が STS に WS-Federation サインイン要求を送信する直前に発生します。 このイベントを使用して、サインイン要求のパラメーターを変更できます。

STS からサインイン応答 (発行されたセキュリティ トークン) を受信すると、次のイベントが発生します。

  • SecurityTokenReceived: STS によって送信されたセキュリティ トークンが応答から読み取られた直後に発生します。

  • SecurityTokenValidated: トークンが検証された直後に発生します。 このイベントを使用して、セキュリティ トークンから作成された要求プリンシパル (ClaimsPrincipal) に要求をフィルター処理、変換、または追加できます。

  • SessionSecurityTokenCreated: 要求プリンシパルから作成されたセッション トークン (SessionSecurityToken) がスレッド プリンシパルと現在のユーザーの設定に使用される直前に発生し、セッション Cookie に書き込まれます。 セッション トークンを変更したり、セッション Cookie の書き込みを有効または無効にしたりすることができます。

  • SignedIn: スレッド プリンシパルと現在のユーザーが設定された直後に、認証の最後に発生します。

  • SignInError: サインイン中に例外が発生した場合に発生します。 要求を取り消し、例外が呼び出し元に返されないようにすることができます。

セッションからサインアウトするとき、または WS-Federation サインアウト クリーンアップ要求 (wsignoutcleanup1.0) を処理するときに、次のイベントが発生します。

  • SigningOut: セッションに依存する可能性のあるクリーンアップを実行したり、サインアウトを取り消したりするために、セッションが削除される直前に発生します。

  • SignedOut: セッションが削除された直後に発生します。

  • SignOutError: サインアウト中に例外が発生した場合に発生します。サインアウトを取り消し、例外が呼び出し元に返されないようにすることができます。

注意

サインアウト イベントは、 メソッドを呼び出 FederatedSignOut して STS でサインアウトするときに発生しません。

WSFAM を使用して STS にサインインするには、2 つの方法があります。 1 つ目は、 プロパティを介してパッシブ リダイレクトを PassiveRedirectEnabled 有効にすることです。 この場合、要求されたリソースで承認が失敗した場合、WSFAM はクライアントへの応答を 401:Access Denied 返すのではなく、そのプロパティから WS-Federation サインイン要求メッセージをビルドし、クライアントを STS にリダイレクトしてセキュリティ トークンを取得します。 2 つ目の方法は、アプリケーションの Web ページまたはカスタム コントロールから メソッドを SignIn 呼び出すことによって、クライアントを STS に明示的にリダイレクトすることです。 また、 メソッドは SignIn WSFAM のプロパティを使用してサインイン要求を作成します。

オーバーロードされた SignOut メソッドは、セッションからサインアウトするために使用できます。 これにより、クライアントのセッション Cookie が削除されます。 WS-Federation サインアウト メッセージ ("wsignout1.0") は STS に送信されません。 STS でサインアウトするには、 メソッドを FederatedSignOut 使用する必要があります。

WSFAM は、クライアントとのセッション WS-Federation 削除することで、サインアウト クリーン要求 ("wsignoutcleanup1.0") を処理します。 サインアウト クリーン メッセージの wreply パラメーターが設定されていない場合、WSFAM はメッセージを送信した STS に緑色のチェックマークの画像を返します。 この機能は、RP がサインアウトを完了したことを確認するために STS によって使用できます。

WSFAM は、いくつかのタスク固有のメソッドを通じて、その機能 (要求処理パイプラインなど) を公開します。 派生クラスでこれらのメソッドをオーバーライドして、WSFAM の動作を変更できます。

使用するには、次の XML のように、モジュールをパイプラインに追加する必要があります。

<configuration>
  <system.webServer>
    <modules>
      <add name="WsFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </modules>
  </system.webServer>
</configuration>

構成が完了すると、 は WSFederationAuthenticationModule HTTP 要求の処理のさまざまな段階でイベントを発生させます。 ASP.NET 開発者は、global.asax ファイルでこれらのイベントを処理できます。

コンストラクター

WSFederationAuthenticationModule()

WSFederationAuthenticationModule クラスを初期化するために、派生クラスのコンストラクターによって呼び出されます。

プロパティ

AuthenticationType

WS-Federation サインイン要求 ("wsignin1.0") で使用される wauth パラメーターの値を取得または設定します。

FederationConfiguration

現在のモジュールに対して有効な FederationConfiguration オブジェクトを取得または設定します。

(継承元 HttpModuleBase)
Freshness

WS-Federation サインイン要求 ("wsignin1.0") で使用される wfresh パラメーターの値を取得または設定します。

HomeRealm

WS-Federation サインイン要求 ("wsignin1.0") で使用される whr パラメーターの値を取得または設定します。

Issuer

セキュリティ トークンの目的の発行元を識別する URI 取得または設定します。

PassiveRedirectEnabled

モデルが WS-Federation プロトコル リダイレクトを開始できるかどうかを指定する値を取得または設定します。

PersistentCookiesOnPassiveRedirects

認証が成功したら永続的なセッション クッキーを発行するかどうかを指定する値を取得または設定します。

Policy

WS-Federation サインイン要求 ("wsignin1.0") で使用される wp パラメーターの値を取得または設定します。

Realm

WS-Federation サインイン要求 ("wsignin1.0") で使用される wtrealm パラメーターの値を取得または設定します。

Reply

WS-Federation サインイン要求 ("wsignin1.0") で使用される wreply パラメーターの値を取得または設定します。

Request

WS-Federation サインイン要求 ("wsignin1.0") で使用される wreq パラメーターの値を取得または設定します。

RequestPtr

WS-Federation サインイン要求 ("wsignin1.0") で使用される wreqptr パラメーターの値を取得または設定します。

RequireHttps

セキュリティ トークン サービス (STS) での通信で HTTPS プロトコルを使用する必要があるかどうかを示す値を取得または設定します。

Resource

WS-Federation サインイン要求 ("wsignin1.0") で使用される wres パラメーターの値を取得または設定します。

SignInContext

WS-Federation サインイン要求の wctx パラメーターに含めるアプリケーション固有のコンテキスト値を取得または設定します。

SignInQueryString

WS-Federation サインイン要求 ("wsignin1.0") で送信される追加パラメーターを含むクエリ文字列を取得または設定します。

SignOutQueryString

WS-Federation サインアウト要求 ("wsignout1.0") で送信される追加パラメーターを含むクエリ文字列を取得または設定します。

SignOutReply

WS-Federation サインアウト要求 ("wsignout1.0") 中に使用される wreply パラメーターの値を取得または設定します。

XmlDictionaryReaderQuotas

セキュリティ トークン サービス (STS) によって発行されたトークンを取得するために WS-Federation サインイン応答メッセージを非シリアル化する際に使用する XmlDictionaryReaderQuotas オブジェクトを取得または設定します。

メソッド

CanReadSignInResponse(HttpRequestBase)

指定した HTTP 要求が WS-Federation サインイン応答メッセージであるかどうかを示す値を返します。 メッセージが WS-Federation サインアウト クリーンアップ メッセージ ("wsignoutcleanup1.0") の場合、このメソッドは要求を処理します。

CanReadSignInResponse(HttpRequestBase, Boolean)

指定した HTTP 要求が WS-Federation サインイン応答メッセージであるかどうかを示す値を返します。 メッセージが WS-Federation サインアウト クリーンアップ メッセージ ("wsignoutcleanup1.0") の場合、このメソッドは要求を処理します。

CreateSignInRequest(String, String, Boolean)

モジュールで構成された WS-Federation パラメーターを使用して WS-Federation サインイン要求メッセージを作成します。

Dispose()

HttpModuleBase クラスの現在のインスタンスによって使用されているリソース (メモリを除く) を解放します。

(継承元 HttpModuleBase)
Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
FederatedSignOut(Uri, Uri)

WS-Federation プロトコルを使用して指定されたセキュリティ トークン サービス (STS) で署名します。

GetFederationPassiveSignOutUrl(String, String, String)

指定した発行者に対処する WS-Federation サインアウト要求を表し、かつ指定した wreply パラメーターと指定した追加のパラメーターを含む URL を返します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetReferencedResult(String)

指定した URL から発行の結果 (通常は発行されたトークン) を取得します。 サインインの応答メッセージの wresultptr パラメーターで指定される URL を解決します。

GetReturnUrlFromResponse(HttpRequestBase)

サインイン応答から最初に要求されたページの URL を抽出します。

GetSecurityToken(HttpRequestBase)

指定した HTTP 要求からセキュリティ トークンを読み取ります。

GetSecurityToken(SignInResponseMessage)

指定した WS フェデレーション サインイン応答メッセージからセキュリティ トークンを読み取ります。

GetSessionTokenContext()

Context プロパティのセッション クッキーで永続化する必要がある文字列を取得します。

GetSignInResponseMessage(HttpRequestBase)

指定した HTTP 要求によって表されるフォーム POST から SignInResponseMessage オブジェクトを読み取ります。

GetSignOutRedirectUrl(SignOutCleanupRequestMessage)

wreply パラメーターが含まれる WS-Federation サインアウト クリーンアップ要求 (wsignoutcleanup1.0) を処理する際のリダイレクト先 URL を判断します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
GetXmlTokenFromMessage(SignInResponseMessage)

指定した WS フェデレーション サインイン応答メッセージから発行されたトークンを抽出します。

GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer)

指定した WS-Federation シリアライザーを使用して、指定した WS-Federation サインイン応答メッセージから発行されたトークンを抽出します。

Init(HttpApplication)

HTTP モジュールを初期化します。

(継承元 HttpModuleBase)
InitializeModule(HttpApplication)

モジュールを初期化し、モジュールの ASP.NET アプリケーション オブジェクトからのイベントを処理するように準備します。

InitializePropertiesFromConfiguration()

モジュールの FederationConfiguration プロパティで指定した構成に基づいてモジュール プロパティを初期化します。

IsSignInResponse(HttpRequestBase)

指定した要求が WS-Federation サインイン応答メッセージであるかどうかを示す値を取得します。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
OnAuthenticateRequest(Object, EventArgs)

AuthenticateRequest ASP.NET パイプラインからイベントを処理します。

OnAuthorizationFailed(AuthorizationFailedEventArgs)

AuthorizationFailed イベントを発生させます。

OnEndRequest(Object, EventArgs)

EndRequest ASP.NET パイプラインからイベントを処理します。

OnPostAuthenticateRequest(Object, EventArgs)

PostAuthenticateRequest ASP.NET パイプラインからイベントを処理します。

OnRedirectingToIdentityProvider(RedirectingToIdentityProviderEventArgs)

RedirectingToIdentityProvider イベントを発生させます。

OnSessionSecurityTokenCreated(SessionSecurityTokenCreatedEventArgs)

SessionSecurityTokenCreated イベントを発生させます。

OnSignedIn(EventArgs)

SignedIn イベントを発生させます。

OnSignedOut(EventArgs)

SignedOut イベントを発生させます。

OnSignInError(ErrorEventArgs)

SignInError イベントを発生させます。

OnSigningOut(SigningOutEventArgs)

SigningOut イベントを発生させます。

OnSignOutError(ErrorEventArgs)

SignOutError イベントを発生させます。

RedirectToIdentityProvider(String, String, Boolean)

WS-Federation プロトコルを使用してセキュリティ トークンを取得するために、Issuer プロパティで指定されるセキュリティ トークン サービス (STS) にユーザーをリダイレクトします。

SetPrincipalAndWriteSessionToken(SessionSecurityToken, Boolean)

スレッドのプリンシパルを設定し、オプションでセッション クッキーを記述します。

SignIn(String)

WS-Federation プロトコルでセキュリティ トークン サービス (STS) へのサインインを実行します。

SignOut()

現在のセッションからサインアウトして、現在の HTTP 要求で指定された URL へのリダイレクトを要求します。

SignOut(Boolean)

現在のセッションからサインアウトして、適切なイベントを発生させます。

SignOut(String)

現在のセッションからサインアウトして、指定された URL へのリダイレクトを要求します。

SignOut(String, Boolean)

現在のセッションからサインアウトして、指定された URL へのリダイレクトを要求します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
VerifyProperties()

IssuerRealm プロパティが空でないことと、RequireHttps プロパティが true の場合に、IssuerRealm に指定された URI が HTTPS に準拠していることを確認します。

イベント

AuthorizationFailed

認証のため設定された発行元にユーザーをリダイレクトする必要があるかどうかをモジュールが決定するときに発生します。

RedirectingToIdentityProvider

モジュールが ID プロバイダーにユーザーをリダイレクトしようとしているときに発生します。

SecurityTokenReceived

セキュリティ トークン サービス (STS) からセキュリティ トークンを受け取ったときに発生します。

SecurityTokenValidated

セキュリティ トークン サービス (STS) から受け取ったセキュリティ トークンが検証されてからセッション セキュリティ トークンが作成されるまでに発生します。

SessionSecurityTokenCreated

セキュリティ トークン サービス (STS) から受け取ったセキュリティ トークンからセッション セキュリティ トークンが作成されたときに発生します。

SignedIn

ユーザーがサインインした後に発生します。

SignedOut

サインアウト中にセッションを削除した直後に発生します。

SignInError

サインイン中にエラーが発生したときに発生します。

SigningOut

サインアウト中にセッションを削除する前に発生します。

SignOutError

サインアウト中にエラーが発生したときに発生します。

適用対象