Condividi tramite


WSFederationAuthenticationModule Classe

Definizione

WSFederationAuthenticationModule è un modulo HTTP usato per proteggere un'applicazione ASP.NET applicando le impostazioni di autenticazione federata alle richieste in ingresso. L'oggetto WSFederationAuthenticationModule è il modulo principale disponibile in WIF per la gestione dell'accesso per l'identità basata sulle attestazioni nelle applicazioni ASP.NET.

L'oggetto WSFederationAuthenticationModule genera vari eventi, consentendo agli sviluppatori ASP.NET di modificare il comportamento predefinito e di controllare i dettagli relativi alla modalità di elaborazione delle attestazioni e dell'autenticazione. La funzionalità WSFederationAuthenticationModule è divisa in metodi specifici delle attività.

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
Ereditarietà
WSFederationAuthenticationModule

Esempio


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");
}

Commenti

La WSFederationAuthenticationModule classe implementa un modulo HTTP noto come WS-Federation Authentication Module (WSFAM). WSFAM viene implementato automaticamente da Windows Identity Foundation (WIF). WSFAM viene aggiunto alla pipeline di ASP.NET creando una voce nel file web.config. Deriva da HttpModuleBase, che implementa IHttpModule. Esegue la registrazione con il runtime di ASP.NET per l'ascolto degli EndRequest eventi e AuthenticateRequest . In ascolto dell'evento EndRequest , consente al WSFAM di reindirizzare i client a un servizio token di sicurezza (STS) per ottenere un token di sicurezza quando l'autorizzazione ha esito negativo in una risorsa richiesta. L'ascolto dell'evento AuthenticateRequest consente al WSFAM di monitorare le richieste HTTP per una risposta dal servizio token di sicurezza che contiene il token richiesto. Quando tale token è presente e valido, crea un'istanza di ClaimsPrincipal per l'utente autenticato usando le attestazioni presenti nel token.

Quando si usa WSFAM, la gestione delle sessioni viene fornita da un modulo di autenticazione della sessione (SAM), che è un'istanza della SessionAuthenticationModule classe o da una classe derivata. Sam viene aggiunto anche alla pipeline di ASP.NET nel file di configurazione. SAM monitora le richieste di cookie di autenticazione (sessione). Quando questi cookie sono presenti e validi, il modulo estrae l'oggetto ClaimsPrincipal per l'utente autenticato da SessionSecurityToken e imposta la HttpContext.User proprietà e le proprietà dell'entità Thread.CurrentPrincipal thread.

WSFAM fornisce:

  • Possibilità per un'applicazione ASP.NET di esternalizzare l'autenticazione a un servizio token di sicurezza (STS) usando il protocollo WS-Federation. L'identità può essere federata in uno o più aree di autenticazione di identità e coinvolgere più token di sicurezza.

  • Identità basata sulle attestazioni per le applicazioni ASP.NET. Durante l'autenticazione, WSFAM compila un'entità dalle attestazioni nel token di sicurezza inviato dal servizio token di sicurezza e imposta questa entità attestazioni come entità thread. È quindi possibile usare questa entità per prendere ulteriori decisioni relative a autorizzazione, presentazione e logica relative all'utente rappresentato nel codice.

WSFAM espone diverse proprietà che forniscono parametri di messaggio predefiniti da usare in WS-Federation richieste di accesso e disconnessione. Queste proprietà vengono in genere inizializzate dall'elemento <wsFederation> in un file di configurazione. Le proprietà più importanti sono:

  • Proprietà Issuer che specifica l'indirizzo del servizio token di sicurezza a cui inviare WS-Federation richieste di accesso e disconnessione.

  • Proprietà Realm che specifica il parametro wtrealm da usare nelle richieste di accesso WS-Federation. Il parametro wtrealm identifica l'area di autenticazione di sicurezza dell'applicazione relying party (RP) al servizio token di sicurezza.

I parametri dei messaggi di accesso possono anche essere modificati in base alla richiesta fornendo un delegato del gestore eventi per l'evento RedirectingToIdentityProvider .

Due proprietà controllano il comportamento del modulo. Entrambe queste proprietà vengono in genere inizializzate dall'elemento <wsFederation> nella configurazione.

  • La PassiveRedirectEnabled proprietà specifica se il modulo deve eseguire reindirizzamenti passivi al servizio token di sicurezza per l'autenticazione.

  • La PersistentCookiesOnPassiveRedirects proprietà specifica se le sessioni devono essere persistenti. Se questa proprietà è impostata su true, il sam viene usato per scrivere un cookie di sessione nel client. Nelle richieste successive dal client, sam fornisce l'autenticazione usando il token salvato in modo permanente nel cookie di sessione.

WSFAM genera diversi eventi durante l'accesso e la disconnessione, consentendo agli sviluppatori di ASP.NET di modificare il comportamento predefinito del modulo e controllare i dettagli del modo in cui viene eseguita l'autenticazione e l'elaborazione delle attestazioni.

Gli eventi seguenti vengono generati prima dell'invio della richiesta di accesso WS-Federation al servizio token di sicurezza:

  • AuthorizationFailed: generato quando il reindirizzamento passivo è abilitato e l'autorizzazione ha esito negativo in una risorsa richiesta.

  • RedirectingToIdentityProvider: generato poco prima che WSFAM invii la richiesta di accesso WS-Federation al servizio token di sicurezza. È possibile usare questo evento per modificare i parametri nella richiesta di accesso.

Gli eventi seguenti vengono generati quando viene ricevuta una risposta di accesso (token di sicurezza emesso) dal servizio token di sicurezza:

  • SecurityTokenReceived: generato subito dopo che il token di sicurezza inviato dal servizio token di sicurezza viene letto dalla risposta.

  • SecurityTokenValidated: generato subito dopo la convalida del token. È possibile usare questo evento per filtrare, trasformare o aggiungere attestazioni all'entità delle attestazioni (ClaimsPrincipal) creata dal token di sicurezza.

  • SessionSecurityTokenCreated: generato poco prima che il token di sessione (SessionSecurityToken) creato dall'entità attestazioni venga usato per impostare l'entità thread e l'utente corrente e viene scritto nel cookie di sessione. Consente di modificare il token di sessione o abilitare o disabilitare la scrittura del cookie di sessione.

  • SignedIn: generato alla fine dell'autenticazione subito dopo l'impostazione dell'entità thread e dell'utente corrente.

  • SignInError: generato se si verifica un'eccezione durante l'accesso. È possibile annullare la richiesta e impedire che l'eccezione venga restituita al chiamante.

Quando si esce da una sessione o quando si elabora una richiesta di pulizia WS-Federation disconnessione (wsignoutcleanup1.0), vengono generati gli eventi seguenti:

  • SigningOut: generato subito prima dell'eliminazione della sessione per consentire di eseguire qualsiasi pulizia che potrebbe dipendere dalla sessione o annullare la disconnessa.

  • SignedOut: generato subito dopo l'eliminazione della sessione.

  • SignOutError: generato se si verifica un'eccezione durante la disconnessità. È possibile annullare la disconnessura e impedire che l'eccezione venga restituita al chiamante.

Nota

Gli eventi di disconnessione non vengono generati durante la disconnessione nel servizio token di sicurezza chiamando il FederatedSignOut metodo .

Esistono due modi per accedere a un servizio token di sicurezza usando WSFAM. Il primo consiste nell'abilitare i reindirizzamenti passivi tramite la PassiveRedirectEnabled proprietà . In questo caso, quando l'autorizzazione non riesce in una risorsa richiesta, anziché restituire una 401:Access Denied risposta al client, WSFAM compila un messaggio di richiesta di accesso WS-Federation dalle relative proprietà e reindirizza il client al servizio token di sicurezza per recuperare un token di sicurezza. Il secondo modo consiste nel reindirizzare in modo esplicito il client al servizio token di sicurezza chiamando il SignIn metodo da una pagina Web o da un controllo personalizzato nell'applicazione. Il SignIn metodo usa anche le proprietà di WSFAM per costruire la richiesta di accesso.

È possibile usare uno dei metodi di SignOut overload per disconnettersi dalla sessione. In questo modo il cookie di sessione viene eliminato nel client. Non invia un messaggio di disconnesso WS-Federation ("wsignout1.0") al servizio token di sicurezza. Per disconnettersi dal servizio token di sicurezza, è necessario usare il FederatedSignOut metodo .

WSFAM gestisce WS-Federation richieste di pulizia di disconnessione ("wsignoutcleanup1.0"), eliminando la sessione con il client. Se il parametro wreply nel messaggio di pulizia della disconnessa non è impostato, WSFAM restituisce un'immagine di un segno di spunta verde al servizio token di sicurezza che ha inviato il messaggio. Questa funzionalità può essere usata da un servizio token di sicurezza come conferma del completamento della disconnessazione da parte del provider di servizi di ripristino.

WSFAM espone la relativa funzionalità, ad esempio la pipeline di elaborazione delle richieste, tramite diversi metodi specifici dell'attività. È possibile eseguire l'override di questi metodi nelle classi derivate per modificare il comportamento di WSFAM.

Per essere usato, il modulo deve essere aggiunto alla pipeline come nel codice XML seguente:

<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>

Dopo la configurazione, genera eventi in varie fasi dell'elaborazione WSFederationAuthenticationModule di una richiesta HTTP. ASP.NET gli sviluppatori possono gestire questi eventi nel file global.asax.

Costruttori

WSFederationAuthenticationModule()

Chiamato dai costruttori nelle classi derivate per inizializzare la classe WSFederationAuthenticationModule.

Proprietà

AuthenticationType

Ottiene o imposta il valore del parametro wauth da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

FederationConfiguration

Ottiene o imposta l'oggetto FederationConfiguration attivo per il modulo corrente.

(Ereditato da HttpModuleBase)
Freshness

Ottiene o imposta il valore del parametro wfresh da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

HomeRealm

Ottiene o imposta il valore del parametro whr da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

Issuer

Ottiene o imposta un URI che identifica l'autorità emittente desiderata del token di sicurezza.

PassiveRedirectEnabled

Ottiene o imposta un valore che specifica se il modulo è abilitato per avviare i reindirizzamenti del protocollo WS-Federation.

PersistentCookiesOnPassiveRedirects

Ottiene o imposta un valore che specifica se il cookie di sessione persistente viene emesso dopo la riuscita dell'autenticazione.

Policy

Ottiene o imposta il valore del parametro wp da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

Realm

Ottiene o imposta il valore del parametro wtrealm da usare per le richieste di accesso WS-Federation ("wsignin1.0").

Reply

Ottiene o imposta il valore del parametro wreply da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

Request

Ottiene o imposta il valore del parametro wreq da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

RequestPtr

Ottiene o imposta il valore del parametro wreqptr da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

RequireHttps

Ottiene o imposta un valore che specifica se la comunicazione con il servizio token di sicurezza (STS) deve utilizzare il protocollo HTTPS.

Resource

Ottiene o imposta il valore del parametro wres da usare nelle richieste di accesso WS-Federation ("wsignin1.0").

SignInContext

Ottiene o imposta un valore di contesto specifico dell'applicazione da includere nel parametro wctx nelle richieste di accesso WS-Federation.

SignInQueryString

Ottiene o imposta una stringa di query contenente eventuali parametri aggiuntivi da inviare nelle richieste di accesso WS-Federation ("wsignin1.0").

SignOutQueryString

Ottiene o imposta una stringa di query contenente eventuali parametri aggiuntivi da inviare nelle richieste di disconnessione WS-Federation ("wsignout1.0").

SignOutReply

Ottiene o imposta il valore del parametro wreply da usare durante le richieste di disconnessione WS-Federation ("wsignout1.0").

XmlDictionaryReaderQuotas

Ottiene o imposta l'oggetto XmlDictionaryReaderQuotas da utilizzare per la deserializzazione di messaggi di risposta di accesso WS-Federation per ottenere il token generato dal servizio token di sicurezza (STS).

Metodi

CanReadSignInResponse(HttpRequestBase)

Restituisce un valore che indica se la richiesta HTTP specificata è un messaggio di risposta di accesso a WS-Federation. Se il messaggio è un messaggio di pulizia di disconnessione WS-Federation ("wsignoutcleanup1.0"), questo metodo elabora la richiesta.

CanReadSignInResponse(HttpRequestBase, Boolean)

Restituisce un valore che indica se la richiesta HTTP specificata è un messaggio di risposta di accesso a WS-Federation. Se il messaggio è un messaggio di pulizia di disconnessione WS-Federation ("wsignoutcleanup1.0"), questo metodo elabora la richiesta.

CreateSignInRequest(String, String, Boolean)

Crea un messaggio di richiesta di accesso di WS-Federation utilizzando i parametri di WS-Federation configurati nel modulo.

Dispose()

Rilascia le risorse (tranne la memoria) utilizzate dall'istanza corrente della classe HttpModuleBase.

(Ereditato da HttpModuleBase)
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
FederatedSignOut(Uri, Uri)

Esce dal servizio token di sicurezza specificato (STS) utilizzando il protocollo WS-Federation.

GetFederationPassiveSignOutUrl(String, String, String)

Restituisce un URL che rappresenta una richiesta di disconnessione WS-Federation indirizzata all'autorità emittente specificata e che contiene il parametro wreply specificato e i parametri aggiuntivi specificati.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetReferencedResult(String)

Ottiene il risultato del rilascio (in genere il token pubblicato) dall'URL specificato. Risolve l'URL specificato nel parametro wresultptr in un messaggio di risposta di accesso.

GetReturnUrlFromResponse(HttpRequestBase)

Estrae l'URL della pagina originariamente richiesta dalla risposta di accesso.

GetSecurityToken(HttpRequestBase)

Legge un token di sicurezza dalla richiesta HTTP specificata.

GetSecurityToken(SignInResponseMessage)

Legge un token di sicurezza dal messaggio di risposta di accesso specificato di WS Federation.

GetSessionTokenContext()

Ottiene una stringa che deve essere mantenuta con il cookie di sessione nella proprietà Context.

GetSignInResponseMessage(HttpRequestBase)

Legge un oggetto SignInResponseMessage dal POST per il form rappresentato dalla richiesta HTTP specificata.

GetSignOutRedirectUrl(SignOutCleanupRequestMessage)

Determinare l'URL a cui reindirizzare durante l'elaborazione di una richiesta di pulizia su disconnessione WS-Federation (wsignoutcleanup1.0) contenente un parametro wreply.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetXmlTokenFromMessage(SignInResponseMessage)

Estrae il token emesso dal messaggio di risposta di accesso specificato di WS Federation.

GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer)

Estrae il token rilasciato dal messaggio di risposta di accesso a WS-Federation specificato utilizzando il serializzatore WS- Federation specificato.

Init(HttpApplication)

Inizializza il modulo HTTP.

(Ereditato da HttpModuleBase)
InitializeModule(HttpApplication)

Inizializza il modulo e lo prepara per gestire gli eventi dall'oggetto applicazione ASP.NET del modulo.

InitializePropertiesFromConfiguration()

Inizializza le proprietà del modulo in base alla configurazione specificata dalla proprietà FederationConfiguration del modulo.

IsSignInResponse(HttpRequestBase)

Ottiene un valore che indica se la richiesta specificata è un messaggio di risposta di accesso a WS-Federation.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnAuthenticateRequest(Object, EventArgs)

Gestisce l'evento AuthenticateRequest dalla pipeline di ASP.NET.

OnAuthorizationFailed(AuthorizationFailedEventArgs)

Genera l'evento AuthorizationFailed.

OnEndRequest(Object, EventArgs)

Gestisce l'evento EndRequest dalla pipeline di ASP.NET.

OnPostAuthenticateRequest(Object, EventArgs)

Gestisce l'evento PostAuthenticateRequest dalla pipeline di ASP.NET.

OnRedirectingToIdentityProvider(RedirectingToIdentityProviderEventArgs)

Genera l'evento RedirectingToIdentityProvider.

OnSessionSecurityTokenCreated(SessionSecurityTokenCreatedEventArgs)

Genera l'evento SessionSecurityTokenCreated.

OnSignedIn(EventArgs)

Genera l'evento SignedIn.

OnSignedOut(EventArgs)

Genera l'evento SignedOut.

OnSignInError(ErrorEventArgs)

Genera l'evento SignInError.

OnSigningOut(SigningOutEventArgs)

Genera l'evento SigningOut.

OnSignOutError(ErrorEventArgs)

Genera l'evento SignOutError.

RedirectToIdentityProvider(String, String, Boolean)

Reindirizza l'utente al servizio token di sicurezza (STS) specificato dalla proprietà Issuer per ottenere un token di sicurezza utilizzando il protocollo WS-Federation.

SetPrincipalAndWriteSessionToken(SessionSecurityToken, Boolean)

Imposta l'entità del thread e facoltativamente scrive il cookie di sessione.

SignIn(String)

Effettua l'accesso a un servizio token di sicurezza (STS) tramite il protocollo WS-Federation.

SignOut()

Esce dalla sessione corrente e richiede un reindirizzamento all'URL specificato nella richiesta HTTP corrente.

SignOut(Boolean)

Esce dalla sessione corrente e genera gli eventi appropriati.

SignOut(String)

Esce dalla sessione corrente e richiede un reindirizzamento all'URL specificato.

SignOut(String, Boolean)

Esce dalla sessione corrente e richiede un reindirizzamento all'URL specificato.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
VerifyProperties()

Verifica che le proprietà Issuer e Realm non sono vuote e, se la proprietà RequireHttps è true, che gli URI specificati per Issuer e Realm sono conformi a HTTPS.

Eventi

AuthorizationFailed

Si verifica quando il modulo determina se l'utente deve essere reindirizzato all'emittente configurato per l'autenticazione.

RedirectingToIdentityProvider

Si verifica quando il modulo reindirizzerà l'utente al provider di identità.

SecurityTokenReceived

Si verifica quando un token di sicurezza è stato ricevuto da un servizio token di sicurezza (STS).

SecurityTokenValidated

Si verifica dopo che un token di sicurezza ricevuto dal servizio STS è stato convalidato ma prima che sia creato il token di sicurezza della sessione.

SessionSecurityTokenCreated

Si verifica quando un token di sicurezza della sessione è stato creato dal token di sicurezza ricevuto da un servizio token di sicurezza (STS).

SignedIn

Si verifica dopo l'accesso dell'utente.

SignedOut

Si verifica subito dopo l'eliminazione della sessione durante la disconnessione.

SignInError

Generato quando si verifica un errore durante l'accesso.

SigningOut

Si verifica prima dell'eliminazione della sessione durante la disconnessione.

SignOutError

Generato quando si verifica un errore durante la disconnessione.

Si applica a