共用方式為


WSFederationAuthenticationModule 類別

定義

WSFederationAuthenticationModule 是 HTTP 模組,用來藉由對傳入要求強制執行同盟驗證設定來保護 ASP.NET 應用程式。 WSFederationAuthenticationModule 是 WIF 提供的主要模組,可用來處理 ASP.NET 應用程式中的宣告型身分識別存取。

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。 它會向 ASP.NET 運行時間註冊,以接聽 EndRequestAuthenticateRequest 事件。 接聽 EndRequest 事件,讓 WSFAM 將用戶端重新導向至安全性令牌服務 (STS),以在要求的資源授權失敗時取得安全性令牌。 接聽 AuthenticateRequest 事件可讓 WSFAM 監視包含所要求令牌之 STS 回應的 HTTP 要求。 當這類令牌存在且有效時,它會使用令牌中存在的宣告,為已驗證的使用者建立 ClaimsPrincipal 實例。

使用 WSFAM 時,會話管理是由會話驗證模組 (SAM) 提供,這是 SessionAuthenticationModule 類別的實例,或衍生自它的類別。 SAM 也會新增至組態檔中的 ASP.NET 管線。 SAM 會監視驗證 (會話) Cookie 的要求。 當這些 Cookie 存在且有效時,模組會從 SessionSecurityToken 擷取已驗證使用者的 ClaimsPrincipal,並設定 HttpContext.User 屬性和線程主體 Thread.CurrentPrincipal 屬性。

WSFAM 提供:

  • ASP.NET 應用程式使用 WS-Federation 通訊協定將驗證外包給安全性令牌服務 (STS) 的能力。 身分識別可以跨一或多個身分識別領域同盟,並牽涉到多個 STS。

  • ASP.NET 應用程式的宣告型身分識別。 在驗證期間,WSFAM 會從 STS 所傳送之安全性令牌中的宣告建置主體,並將此宣告主體設定為線程主體。 然後,您可以使用此主體來進一步對程式代碼中代表的使用者進行授權、呈現和邏輯決策。

WSFAM 會公開數個屬性,以提供預設訊息參數,以用於 WS-Federation 登入和註銷要求。 這些屬性通常會從組態檔中的 <wsFederation> 元素初始化。 這些屬性中最重要的是:

  • Issuer 屬性,指定要傳送 WS-Federation 登入和註銷要求的安全性令牌服務 (STS) 位址。

  • Realm 屬性,指定 WS-Federation 登入要求中使用的 wtrealm 參數。 wtrealm 參數會識別 STS 之信賴憑證者 (RP) 應用程式的安全性領域。

您也可以藉由提供 RedirectingToIdentityProvider 事件的事件處理程式委派,依要求變更登入訊息參數。

兩個屬性會控制模組的行為。 這兩個屬性通常也會從組態中的 <wsFederation> 元素初始化。

  • PassiveRedirectEnabled 屬性會指定模組是否應該執行被動重新導向至 STS 以進行驗證。

  • PersistentCookiesOnPassiveRedirects 屬性會指定工作階段是否應該持續。 如果此屬性設定為 true,SAM 會用來將會話 Cookie 寫入用戶端。 在客戶端的後續要求上,SAM 會使用會話 Cookie 中保存的令牌來提供驗證。

WSFAM 會在登入和註銷期間引發數個事件,這可讓 ASP.NET 開發人員變更模組的預設行為,並控制驗證和宣告處理方式的詳細數據。

下列事件會在 WS-Federation 登入要求傳送至 STS 之前引發:

  • AuthorizationFailed:啟用被動重新導向時引發,且要求的資源上的授權失敗。

  • RedirectingToIdentityProvider:在 WSFAM 將 WS-Federation 登入要求傳送至 STS 之前引發。 您可以使用此事件來變更登入要求中的參數。

從 STS 收到登入回應(已發行的安全性令牌)時,會引發下列事件:

  • SecurityTokenReceived:在 STS 傳送的安全性令牌從回應讀取之後引發。

  • SecurityTokenValidated:在驗證令牌之後引發。 您可以使用此事件來篩選、轉換或新增宣告至從安全性令牌建立的宣告主體(ClaimsPrincipal)。

  • SessionSecurityTokenCreated:在從宣告主體建立的會話令牌(SessionSecurityToken)之前引發,用來設定線程主體和目前使用者,並寫入會話 Cookie。 讓您有機會修改會話令牌,或啟用或停用寫入會話 Cookie。

  • SignedIn:在線程主體和目前用戶設定之後,於驗證結尾引發。

  • SignInError:如果登入期間發生例外狀況,則引發。 您可以取消要求,並防止例外狀況傳回給呼叫端。

註銷會話或處理 WS-Federation 註銷清除要求 (wsignoutcleanup1.0) 時,會引發下列事件:

  • SigningOut:在刪除會話之前引發,可讓您執行任何可能相依於工作階段或取消註銷的清除。

  • SignedOut:在刪除會話之後引發。

  • SignOutError:註銷期間發生例外狀況時引發。您可以取消註銷,並防止例外狀況傳回給呼叫端。

注意

藉由呼叫 FederatedSignOut 方法,在 STS 註銷時,不會引發註銷事件。

使用 WSFAM 登入 STS 的方式有兩種。 第一個是透過 PassiveRedirectEnabled 屬性啟用被動重新導向。 在此情況下,當要求的資源授權失敗,而不是傳回對用戶端的 401:Access Denied 回應時,WSFAM 會從其屬性建置 WS-Federation 登入要求訊息,並將用戶端重新導向至 STS 以擷取安全性令牌。 第二種方式是從應用程式中的網頁或自定義控件呼叫 SignIn 方法,明確地將用戶端重新導向至 STS。 SignIn 方法也會使用 WSFAM 的屬性來建構登入要求。

任何多載 SignOut 方法都可以用來註銷會話。 這會刪除用戶端上的會話 Cookie。 它不會將 WS-Federation 註銷訊息 (“wsignout1.0”) 傳送至 STS。 若要在 STS 註銷,您必須使用 FederatedSignOut 方法。

WSFAM 會刪除用戶端的會話,以處理 WS-Federation 註銷清除要求(“wsignoutcleanup1.0”),。 如果未設定註銷清除訊息中的 wreply 參數,WSFAM 會將綠色複選標記的影像傳回給傳送訊息的 STS。 STS 可以使用此功能作為 RP 已完成註銷的通知。

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

取得或設定 wauth 參數的值,以用於 WS-Federation 登入要求中 (“wsignin1.0” )。

FederationConfiguration

取得或設定目前模組生效的 FederationConfiguration 物件。

(繼承來源 HttpModuleBase)
Freshness

取得或設定 wfresh 參數的值,以用於 WS-Federation 登入要求 (“wsignin1.0” )。

HomeRealm

取得或設定 whr 參數的值,以用於 WS-Federation 登入要求中 (“wsignin1.0” )。

Issuer

取得或設定 URI,識別安全性令牌的預期簽發者。

PassiveRedirectEnabled

取得或設定值,指定是否啟用模組來起始 WS-Federation 通訊協定重新導向。

PersistentCookiesOnPassiveRedirects

取得或設定值,指定是否在成功驗證時發出持續性會話 Cookie。

Policy

取得或設定要用於 WS-Federation 登入要求中的 wp 參數值 (“wsignin1.0” )。

Realm

取得或設定要用於 WS-Federation 登入要求之 wtrealm 參數的值(“wsignin1.0” )。

Reply

取得或設定 wreply 參數的值,以用於 WS-Federation 登入要求中 (“wsignin1.0” )。

Request

取得或設定 wreq 參數的值,以用於 WS-Federation 登入要求中 (“wsignin1.0” )。

RequestPtr

取得或設定 wreqptr 參數的值,以用於 WS-Federation 登入要求 (“wsignin1.0” )。

RequireHttps

取得或設定值,指定與安全性令牌服務 (STS) 的通訊是否必須使用 HTTPS 通訊協定。

Resource

取得或設定 wres 參數的值,以用於 WS-Federation 登入要求 (“wsignin1.0” )。

SignInContext

取得或設定要包含在 WS-Federation 登入要求中 wctx 參數的應用程式特定內容值。

SignInQueryString

取得或設定查詢字串,其中包含 WS-Federation 登入要求中傳送的任何其他參數(“wsignin1.0” )。

SignOutQueryString

取得或設定查詢字串,其中包含 WS-Federation 註銷要求中要傳送的任何其他參數(“wsignout1.0” )。

SignOutReply

取得或設定在 WS-Federation 註銷要求期間要使用的 wreply 參數值 (“wsignout1.0” )。

XmlDictionaryReaderQuotas

取得或設定還原串行化 WS-Federation 登入回應訊息時要使用的 XmlDictionaryReaderQuotas 物件,以取得安全性令牌服務所發出的令牌(STS)。

方法

CanReadSignInResponse(HttpRequestBase, Boolean)

傳回值,指出指定的 HTTP 要求是否為 WS-Federation 登入回應消息。 如果訊息是 WS-Federation 註銷清除訊息 (“wsignoutcleanup1.0”),這個方法會處理要求。

CanReadSignInResponse(HttpRequestBase)

傳回值,指出指定的 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)

傳回 URL,表示已尋址至指定簽發者的 WS-Federation 註銷要求,以及包含指定的 wreply 參數和指定的其他參數。

GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetReferencedResult(String)

從指定的 URL 取得發行結果(通常是已發行的令牌)。 解析登入回應消息中 wresultptr 參數中指定的 URL。

GetReturnUrlFromResponse(HttpRequestBase)

擷取原本從登入回應要求的頁面 URL。

GetSecurityToken(HttpRequestBase)

從指定的 HTTP 要求讀取安全性令牌。

GetSecurityToken(SignInResponseMessage)

從指定的 WS 同盟登入回應消息讀取安全性令牌。

GetSessionTokenContext()

取得字串,該字串應該與 Context 屬性中的會話 Cookie 一起保存。

GetSignInResponseMessage(HttpRequestBase)

從指定的 HTTP 要求所代表的 POST 表單讀取 SignInResponseMessage 物件。

GetSignOutRedirectUrl(SignOutCleanupRequestMessage)

決定處理包含 wreply 參數的 WS-Federation 註銷清除要求 (wsignoutcleanup1.0) 時要重新導向的 URL。

GetType()

取得目前實例的 Type

(繼承來源 Object)
GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer)

使用指定的 WS-Federation 串行化程式,從指定的 WS-Federation 登入回應消息擷取發行的令牌。

GetXmlTokenFromMessage(SignInResponseMessage)

從指定的 WS-Federation 登入回應消息擷取發行的令牌。

Init(HttpApplication)

初始化 HTTP 模組。

(繼承來源 HttpModuleBase)
InitializeModule(HttpApplication)

初始化模組,並準備它來處理來自模組 ASP.NET 應用程式物件的事件。

InitializePropertiesFromConfiguration()

根據模組的 FederationConfiguration 屬性所指定的組態,初始化模組屬性。

IsSignInResponse(HttpRequestBase)

取得值,這個值表示指定的要求是否為 WS-Federation 登入回應消息。

MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
OnAuthenticateRequest(Object, EventArgs)

處理來自 ASP.NET 管線 AuthenticateRequest 事件。

OnAuthorizationFailed(AuthorizationFailedEventArgs)

引發 AuthorizationFailed 事件。

OnEndRequest(Object, EventArgs)

處理來自 ASP.NET 管線 EndRequest 事件。

OnPostAuthenticateRequest(Object, EventArgs)

處理來自 ASP.NET 管線 PostAuthenticateRequest 事件。

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)

將使用者重新導向至 Issuer 屬性所指定的安全性令牌服務 (STS),以使用 WS-Federation 通訊協定取得安全性令牌。

SetPrincipalAndWriteSessionToken(SessionSecurityToken, Boolean)

設定線程主體,並選擇性地寫入會話 Cookie。

SignIn(String)

透過 WS-Federation 通訊協定執行安全性令牌服務 (STS) 的登入。

SignOut()

註銷目前的會話,並要求重新導向回目前 HTTP 要求中指定的 URL。

SignOut(Boolean)

註銷目前的會話,並引發適當的事件。

SignOut(String, Boolean)

註銷目前的會話,並要求重新導向回到指定的URL。

SignOut(String)

註銷目前的會話,並要求重新導向回到指定的URL。

ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)
VerifyProperties()

確認 IssuerRealm 屬性不是空的,而且,如果 RequireHttps 屬性 true,則為 IssuerRealm 指定的 URI 符合 HTTPS 規範。

事件

AuthorizationFailed

當模組判斷是否應該將使用者重新導向至設定的簽發者進行驗證時發生。

RedirectingToIdentityProvider

發生於模組將使用者重新導向至識別提供者時。

SecurityTokenReceived

發生於從安全性令牌服務 (STS) 收到安全性令牌時。

SecurityTokenValidated

發生在從安全性令牌服務 (STS) 接收的安全性令牌經過驗證之後,但在建立會話安全性令牌之前發生。

SessionSecurityTokenCreated

發生於從安全性令牌服務 (STS) 收到的安全性令牌建立會話安全性令牌時。

SignedIn

會在使用者登入之後發生。

SignedOut

在註銷期間刪除會話之後發生。

SignInError

登入期間發生錯誤時引發。

SigningOut

在註銷期間刪除會話之前發生。

SignOutError

註銷期間發生錯誤時引發。

適用於