WSFederationAuthenticationModule Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
El WSFederationAuthenticationModule es un módulo HTTP que se usa para proteger una aplicación de ASP.NET aplicando la configuración de autenticación federada en las solicitudes entrantes. El WSFederationAuthenticationModule es el módulo principal que WIF ofrece de fábrica para controlar el acceso de identidad basado en notificaciones en ASP.NET aplicaciones.
El WSFederationAuthenticationModule genera varios eventos, lo que permite a los desarrolladores de ASP.NET cambiar el comportamiento predeterminado y controlar los detalles de cómo se realiza la autenticación y el procesamiento de notificaciones. La funcionalidad WSFederationAuthenticationModule se divide en métodos específicos de la tarea.
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
- Herencia
Ejemplos
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");
}
Comentarios
La clase WSFederationAuthenticationModule implementa un módulo HTTP conocido como módulo de autenticación WS-Federation (WSFAM). Windows Identity Foundation (WIF) implementa WSFAM de forma predeterminada. WSFAM se agrega a la canalización de ASP.NET realizando una entrada en el archivo web.config. Deriva de HttpModuleBase, que implementa IHttpModule. Se registra con el entorno de ejecución de ASP.NET para escuchar los eventos de EndRequest y AuthenticateRequest. Escuchando el evento EndRequest, permite que WSFAM redirija los clientes a un servicio de token de seguridad (STS) para obtener un token de seguridad cuando se produce un error de autorización en un recurso solicitado. Escuchar el evento AuthenticateRequest permite al WSFAM supervisar las solicitudes HTTP de una respuesta del STS que contiene el token solicitado. Cuando este token está presente y es válido, crea una instancia de ClaimsPrincipal para el usuario autenticado mediante las notificaciones presentes en el token.
Cuando se usa WSFAM, un módulo de autenticación de sesión (SAM) proporciona administración de sesión, que es una instancia de la clase SessionAuthenticationModule o una clase derivada de ella. El SAM también se agrega a la canalización de ASP.NET en el archivo de configuración. Sam supervisa las solicitudes de cookies de autenticación (sesión). Cuando estas cookies están presentes y válidas, el módulo extrae el ClaimsPrincipal para el usuario autenticado de la SessionSecurityToken y establece la propiedad HttpContext.User y la entidad de seguridad de subproceso Thread.CurrentPrincipal propiedades.
WSFAM proporciona:
La capacidad de una aplicación de ASP.NET para subcontratar la autenticación a un servicio de token de seguridad (STS) mediante el protocolo WS-Federation. La identidad se puede federar en uno o varios dominios de identidad e implicar varios STS.
Identidad basada en notificaciones para aplicaciones ASP.NET. Durante la autenticación, WSFAM crea una entidad de seguridad a partir de las notificaciones del token de seguridad enviado por el STS y establece esta entidad de notificaciones como la entidad de seguridad del subproceso. A continuación, puede usar esta entidad de seguridad para tomar más decisiones de autorización, presentación y lógica sobre el usuario que representa en el código.
WSFAM expone varias propiedades que proporcionan parámetros de mensaje predeterminados que se usarán en WS-Federation solicitudes de inicio de sesión y cierre de sesión. Estas propiedades se inicializan normalmente a partir del <elemento wsFederation> en un archivo de configuración. Las propiedades más importantes son:
La propiedad Issuer, que especifica la dirección del servicio de token de seguridad (STS) al que enviar WS-Federation solicitudes de inicio de sesión y cierre de sesión.
La propiedad Realm, que especifica el parámetro wtrealm que se va a usar en WS-Federation solicitudes de inicio de sesión. El parámetro wtrealm identifica el dominio de seguridad de la aplicación de usuario de confianza (RP) al STS.
Los parámetros del mensaje de inicio de sesión también se pueden cambiar por solicitud proporcionando un delegado de controlador de eventos para el evento de RedirectingToIdentityProvider.
Dos propiedades controlan el comportamiento del módulo. Ambas propiedades también se inicializan normalmente a partir del elemento <wsFederation>
en la configuración.
La propiedad PassiveRedirectEnabled especifica si el módulo debe realizar redirecciones pasivas al STS para la autenticación.
La propiedad PersistentCookiesOnPassiveRedirects especifica si las sesiones deben ser persistentes. Si esta propiedad se establece en true, la SAM se usa para escribir una cookie de sesión en el cliente. En las solicitudes posteriores del cliente, SAM proporciona autenticación mediante el token almacenado en la cookie de sesión.
WSFAM genera varios eventos durante el inicio de sesión y el cierre de sesión, lo que permite a los desarrolladores de ASP.NET cambiar el comportamiento predeterminado del módulo y controlar los detalles de cómo se realiza la autenticación y el procesamiento de notificaciones.
Los siguientes eventos se generan antes de que se envíe la solicitud de inicio de sesión de WS-Federation al STS:
AuthorizationFailed: se genera cuando la redirección pasiva está habilitada y se produce un error de autorización en un recurso solicitado.
RedirectingToIdentityProvider: se genera justo antes de que WSFAM envíe la solicitud de inicio de sesión WS-Federation al STS. Puede usar este evento para cambiar los parámetros en la solicitud de inicio de sesión.
Los siguientes eventos se generan cuando se recibe una respuesta de inicio de sesión (token de seguridad emitido) del STS:
SecurityTokenReceived: se genera justo después del token de seguridad enviado por el STS de la respuesta.
SecurityTokenValidated: se genera justo después de validar el token. Puede usar este evento para filtrar, transformar o agregar notificaciones a la entidad de seguridad de notificaciones (ClaimsPrincipal) creada a partir del token de seguridad.
SessionSecurityTokenCreated: se genera justo antes del token de sesión (SessionSecurityToken) creado a partir de la entidad de notificaciones para establecer la entidad de seguridad del subproceso y el usuario actual y se escribe en la cookie de sesión. Le ofrece la oportunidad de modificar el token de sesión o habilitar o deshabilitar la escritura de la cookie de sesión.
SignedIn: se genera al final de la autenticación justo después de que se haya establecido la entidad de seguridad del subproceso y el usuario actual.
SignInError: se genera si se produce una excepción durante el inicio de sesión. Puede cancelar la solicitud e impedir que se devuelva la excepción al autor de la llamada.
Al cerrar sesión o al procesar una solicitud de limpieza de cierre de sesión de WS-Federation (wsignoutcleanup1.0), se generan los siguientes eventos:
SigningOut: se genera justo antes de que se elimine la sesión para permitirle realizar cualquier limpieza que pueda depender de la sesión o cancelar la cierre de sesión.
SignedOut: se genera justo después de eliminar la sesión.
SignOutError: se genera si se produce una excepción durante el cierre de sesión. Puede cancelar el cierre de sesión y evitar que se devuelva la excepción al autor de la llamada.
Nota
Los eventos de cierre de sesión no se generan al cerrar sesión en el STS llamando al método FederatedSignOut.
Hay dos maneras de iniciar sesión en un STS mediante WSFAM. La primera es habilitar redirecciones pasivas a través de la propiedad PassiveRedirectEnabled. En este caso, cuando se produce un error de autorización en un recurso solicitado, en lugar de devolver una respuesta de 401:Access Denied
al cliente, WSFAM crea un mensaje de solicitud de inicio de sesión de WS-Federation desde sus propiedades y redirige al cliente al STS para recuperar un token de seguridad. La segunda forma consiste en redirigir explícitamente el cliente al STS mediante una llamada al método SignIn desde una página web o un control personalizado en la aplicación. El método SignIn también usa las propiedades del WSFAM para construir la solicitud de inicio de sesión.
Cualquiera de los métodos de SignOut sobrecargados se puede usar para cerrar la sesión. Esto elimina la cookie de sesión en el cliente. No envía un mensaje de cierre de sesión WS-Federation ("wsignout1.0") al STS. Para cerrar sesión en el STS, debe usar el método FederatedSignOut.
WSFAM controla WS-Federation solicitudes de limpieza de cierre de sesión ("wsignoutcleanup1.0"), eliminando su sesión con el cliente. Si no se establece el parámetro wreply en el mensaje de limpieza de cierre de sesión, WSFAM devuelve una imagen de una marca de verificación verde al STS que envió el mensaje. Un STS puede usar esta característica como confirmación de que el RP ha completado su cierre de sesión.
WSFAM expone su funcionalidad (por ejemplo, su canalización de procesamiento de solicitudes) a través de varios métodos específicos de la tarea. Puede invalidar estos métodos en clases derivadas para modificar el comportamiento de WSFAM.
Para su uso, el módulo debe agregarse a la canalización como en el siguiente 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>
Una vez configurado, el WSFederationAuthenticationModule genera eventos en varias fases del procesamiento de una solicitud HTTP. ASP.NET los desarrolladores pueden controlar estos eventos en el archivo global.asax.
Constructores
WSFederationAuthenticationModule() |
Llamado por constructores de clases derivadas para inicializar la clase WSFederationAuthenticationModule. |
Propiedades
AuthenticationType |
Obtiene o establece el valor del parámetro wauth que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
FederationConfiguration |
Obtiene o establece el objeto FederationConfiguration que está en vigor para el módulo actual. (Heredado de HttpModuleBase) |
Freshness |
Obtiene o establece el valor del parámetro wfresh que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
HomeRealm |
Obtiene o establece el valor del parámetro whr que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
Issuer |
Obtiene o establece un URI que identifica el emisor previsto del token de seguridad. |
PassiveRedirectEnabled |
Obtiene o establece un valor que especifica si el módulo está habilitado para iniciar las redirecciones del protocolo WS-Federation. |
PersistentCookiesOnPassiveRedirects |
Obtiene o establece un valor que especifica si se emite una cookie de sesión persistente en la autenticación correcta. |
Policy |
Obtiene o establece el valor del parámetro wp que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
Realm |
Obtiene o establece el valor del parámetro wtrealm que se va a usar para WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
Reply |
Obtiene o establece el valor del parámetro wreply que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
Request |
Obtiene o establece el valor del parámetro wreq que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
RequestPtr |
Obtiene o establece el valor del parámetro wreqptr que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
RequireHttps |
Obtiene o establece un valor que especifica si la comunicación con el servicio de token de seguridad (STS) debe usar el protocolo HTTPS. |
Resource |
Obtiene o establece el valor del parámetro wres que se va a usar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
SignInContext |
Obtiene o establece un valor de contexto específico de la aplicación que se va a incluir en el parámetro wctx en WS-Federation solicitudes de inicio de sesión. |
SignInQueryString |
Obtiene o establece una cadena de consulta que contiene los parámetros adicionales que se van a enviar en WS-Federation solicitudes de inicio de sesión ("wsignin1.0"). |
SignOutQueryString |
Obtiene o establece una cadena de consulta que contiene los parámetros adicionales que se van a enviar en WS-Federation solicitudes de cierre de sesión ("wsignout1.0"). |
SignOutReply |
Obtiene o establece el valor del parámetro wreply que se va a usar durante WS-Federation solicitudes de cierre de sesión ("wsignout1.0"). |
XmlDictionaryReaderQuotas |
Obtiene o establece el objeto XmlDictionaryReaderQuotas que se va a usar al deserializar WS-Federation mensajes de respuesta de inicio de sesión para obtener el token emitido por el servicio de token de seguridad (STS). |
Métodos
CanReadSignInResponse(HttpRequestBase, Boolean) |
Devuelve un valor que indica si la solicitud HTTP especificada es un mensaje de respuesta de inicio de sesión WS-Federation. Si el mensaje es un WS-Federation mensaje de limpieza de cierre de sesión ("wsignoutcleanup1.0"), este método procesa la solicitud. |
CanReadSignInResponse(HttpRequestBase) |
Devuelve un valor que indica si la solicitud HTTP especificada es un mensaje de respuesta de inicio de sesión WS-Federation. Si el mensaje es un WS-Federation mensaje de limpieza de cierre de sesión ("wsignoutcleanup1.0"), este método procesa la solicitud. |
CreateSignInRequest(String, String, Boolean) |
Crea un WS-Federation mensaje de solicitud de inicio de sesión mediante los parámetros WS-Federation configurados en el módulo. |
Dispose() |
Libera los recursos (excepto la memoria) usados por la instancia actual de la clase HttpModuleBase. (Heredado de HttpModuleBase) |
Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
FederatedSignOut(Uri, Uri) |
Cierra la sesión en el servicio de token de seguridad (STS) especificado mediante el protocolo WS-Federation. |
GetFederationPassiveSignOutUrl(String, String, String) |
Devuelve una dirección URL que representa una solicitud de cierre de sesión de WS-Federation dirigida al emisor especificado y que contiene el parámetro wreply especificado y los parámetros adicionales especificados. |
GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
GetReferencedResult(String) |
Obtiene el resultado de emisión (normalmente el token emitido) de la dirección URL especificada. Resuelve la dirección URL especificada en el parámetro wresultptr en un mensaje de respuesta de inicio de sesión. |
GetReturnUrlFromResponse(HttpRequestBase) |
Extrae la dirección URL de la página que se solicitó originalmente de la respuesta de inicio de sesión. |
GetSecurityToken(HttpRequestBase) |
Lee un token de seguridad de la solicitud HTTP especificada. |
GetSecurityToken(SignInResponseMessage) |
Lee un token de seguridad del mensaje de respuesta de inicio de sesión de federación de WS especificado. |
GetSessionTokenContext() |
Obtiene una cadena que se debe conservar con la cookie de sesión en la propiedad Context. |
GetSignInResponseMessage(HttpRequestBase) |
Lee un objeto SignInResponseMessage del formulario POST representado por la solicitud HTTP especificada. |
GetSignOutRedirectUrl(SignOutCleanupRequestMessage) |
Determina la dirección URL a la que se redirigirá al procesar una solicitud de limpieza de cierre de sesión de WS-Federation (wsignoutcleanup1.0) que contiene un parámetro wreply. |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer) |
Extrae el token emitido del mensaje de respuesta de inicio de sesión especificado WS-Federation mediante el serializador de WS-Federation especificado. |
GetXmlTokenFromMessage(SignInResponseMessage) |
Extrae el token emitido del mensaje de respuesta de inicio de sesión WS-Federation especificado. |
Init(HttpApplication) |
Inicializa el módulo HTTP. (Heredado de HttpModuleBase) |
InitializeModule(HttpApplication) |
Inicializa el módulo y lo prepara para controlar eventos desde el objeto de aplicación ASP.NET del módulo. |
InitializePropertiesFromConfiguration() |
Inicializa las propiedades del módulo en función de la configuración especificada por la propiedad FederationConfiguration del módulo. |
IsSignInResponse(HttpRequestBase) |
Obtiene un valor que indica si la solicitud especificada es un mensaje de respuesta de inicio de sesión WS-Federation. |
MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
OnAuthenticateRequest(Object, EventArgs) |
Controla el evento AuthenticateRequest de la canalización de ASP.NET. |
OnAuthorizationFailed(AuthorizationFailedEventArgs) |
Genera el evento AuthorizationFailed. |
OnEndRequest(Object, EventArgs) |
Controla el evento EndRequest de la canalización de ASP.NET. |
OnPostAuthenticateRequest(Object, EventArgs) |
Controla el evento PostAuthenticateRequest de la canalización de ASP.NET. |
OnRedirectingToIdentityProvider(RedirectingToIdentityProviderEventArgs) |
Genera el evento RedirectingToIdentityProvider. |
OnSessionSecurityTokenCreated(SessionSecurityTokenCreatedEventArgs) |
Genera el evento SessionSecurityTokenCreated. |
OnSignedIn(EventArgs) |
Genera el evento SignedIn. |
OnSignedOut(EventArgs) |
Genera el evento SignedOut. |
OnSignInError(ErrorEventArgs) |
Genera el evento SignInError. |
OnSigningOut(SigningOutEventArgs) |
Genera el evento SigningOut. |
OnSignOutError(ErrorEventArgs) |
Genera el evento SignOutError. |
RedirectToIdentityProvider(String, String, Boolean) |
Redirige al usuario al servicio de token de seguridad (STS) especificado por la propiedad Issuer para obtener un token de seguridad mediante el protocolo WS-Federation. |
SetPrincipalAndWriteSessionToken(SessionSecurityToken, Boolean) |
Establece la entidad de seguridad del subproceso y, opcionalmente, escribe la cookie de sesión. |
SignIn(String) |
Realiza el inicio de sesión en un servicio de token de seguridad (STS) a través del protocolo WS-Federation. |
SignOut() |
Cierra la sesión actual y solicita una redirección a la dirección URL especificada en la solicitud HTTP actual. |
SignOut(Boolean) |
Cierra la sesión actual y genera los eventos adecuados. |
SignOut(String, Boolean) |
Cierra la sesión actual y solicita una redirección a la dirección URL especificada. |
SignOut(String) |
Cierra la sesión actual y solicita una redirección a la dirección URL especificada. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
VerifyProperties() |
Comprueba que las propiedades Issuer y Realm no están vacías y, si la propiedad RequireHttps es |
Eventos
AuthorizationFailed |
Se produce cuando el módulo determina si debe redirigir al usuario al emisor configurado para autenticarse. |
RedirectingToIdentityProvider |
Se produce cuando el módulo va a redirigir al usuario al proveedor de identidades. |
SecurityTokenReceived |
Se produce cuando se recibe un token de seguridad de un servicio de token de seguridad (STS). |
SecurityTokenValidated |
Se produce después de validar un token de seguridad que se recibió del servicio de token de seguridad (STS), pero antes de crear el token de seguridad de sesión. |
SessionSecurityTokenCreated |
Se produce cuando se ha creado un token de seguridad de sesión a partir del token de seguridad recibido de un servicio de token de seguridad (STS). |
SignedIn |
Se produce después de que el usuario haya iniciado sesión. |
SignedOut |
Se produce justo después de eliminar la sesión durante el cierre de sesión. |
SignInError |
Se genera cuando se produce un error durante el inicio de sesión. |
SigningOut |
Se produce antes de eliminar la sesión durante el cierre de sesión. |
SignOutError |
Se genera cuando se produce un error durante el cierre de sesión. |