WSFederationAuthenticationModule Clase

Definición

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. WSFederationAuthenticationModule es el módulo principal que WIF proporciona listo para usar para administrar el acceso de identidad basado en notificaciones en las aplicaciones de ASP.NET.

WSFederationAuthenticationModule provoca varios eventos, lo que permite a los desarrolladores de ASP.NET cambiar el comportamiento predeterminado y controlar los detalles de cómo tienen lugar la autenticación y el procesamiento de notificaciones. La funcionalidad de 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
WSFederationAuthenticationModule

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 WSFederationAuthenticationModule clase implementa un módulo HTTP conocido como módulo de autenticación de WS-Federation (WSFAM). Windows Identity Foundation (WIF) implementa WSFAM de forma predeterminada. WSFAM se agrega a la canalización de ASP.NET mediante la realización de 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 EndRequest eventos y AuthenticateRequest . Escuchando el EndRequest evento, 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 AuthenticateRequest evento permite que WSFAM supervise 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 la administración de sesión, que es una instancia de la SessionAuthenticationModule clase 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 autenticación (sesión). Cuando estas cookies están presentes y válidas, el módulo extrae para ClaimsPrincipal el usuario autenticado de SessionSecurityToken y establece la HttpContext.User propiedad y las propiedades de la entidad Thread.CurrentPrincipal de seguridad del subproceso.

WSFAM proporciona:

  • La capacidad de una aplicación de ASP.NET externalizar 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 seguridad de notificaciones como la entidad de seguridad del subproceso. Después, 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 desde el <elemento wsFederation> en un archivo de configuración. Las propiedades más importantes son:

  • La Issuer propiedad , 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 Realm propiedad , 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 RedirectingToIdentityProvider evento.

Dos propiedades controlan el comportamiento del módulo. Ambas propiedades también se inicializan normalmente a partir del elemento en la <wsFederation> configuración.

  • La PassiveRedirectEnabled propiedad especifica si el módulo debe realizar redirecciones pasivas al STS para la autenticación.

  • La PersistentCookiesOnPassiveRedirects propiedad especifica si las sesiones deben ser persistentes. Si esta propiedad se establece en true, el 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 WS-Federation al STS:

  • AuthorizationFailed: se genera cuando se habilita el redireccionamiento pasivo 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 de que el token de seguridad enviado por el STS se lea 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 seguridad 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 establecer la entidad de seguridad del subproceso y el usuario actual.

  • SignInError: se produce 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 en una 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 produce 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 mediante una llamada al FederatedSignOut método .

Hay dos maneras de iniciar sesión en un STS mediante WSFAM. La primera es habilitando redirecciones pasivas a través de la PassiveRedirectEnabled propiedad . En este caso, cuando se produce un error de autorización en un recurso solicitado, en lugar de devolver una 401:Access Denied respuesta al cliente, WSFAM genera un mensaje de solicitud de inicio de sesión WS-Federation de sus propiedades y redirige al cliente al STS para recuperar un token de seguridad. La segunda manera es redirigir explícitamente el cliente al STS mediante una llamada al SignIn método desde una página web o un control personalizado en la aplicación. El SignIn método también usa las propiedades del WSFAM para construir la solicitud de inicio de sesión.

Cualquiera de los métodos sobrecargados SignOut 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 FederatedSignOut método .

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, 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()

Se le llama desde los constructores en las clases derivadas para inicializar la clase WSFederationAuthenticationModule.

Propiedades

AuthenticationType

Obtiene o establece el valor del parámetro wauth que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

FederationConfiguration

Obtiene o establece el objeto FederationConfiguration que esté en efecto para el módulo actual.

(Heredado de HttpModuleBase)
Freshness

Obtiene o establece el valor del parámetro wfresh que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

HomeRealm

Obtiene o establece el valor del parámetro whr que se usa en las solicitudes de inicio de sesión de WS-Federation ("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 redirecciones de protocolo de federación de WS.

PersistentCookiesOnPassiveRedirects

Obtiene o establece un valor que especifica si una cookie de sesión persistente se emite en la autenticación correcta.

Policy

Obtiene o establece el valor del parámetro wp que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

Realm

Obtiene o establece el valor del parámetro wtrealm que se usa para las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

Reply

Obtiene o establece el valor del parámetro wreply que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

Request

Obtiene o establece el valor del parámetro wreq que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

RequestPtr

Obtiene o establece el valor del parámetro wreqptr que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

RequireHttps

Obtiene o establece un valor que especifica si la comunicación con el servicio de tokens de seguridad (STS) debe utilizar el protocolo HTTPS.

Resource

Obtiene o establece el valor del parámetro wres que se usa en las solicitudes de inicio de sesión de WS-Federation ("wsignin1.0").

SignInContext

Obtiene o establece un valor de contexto específico de la aplicación que se incluirá en el parámetro wctx en las solicitudes de inicio de sesión WS-Federation.

SignInQueryString

Obtiene o establece una cadena de consulta que contiene los parámetros adicionales que se van a enviar en las solicitudes de inicio de sesión de WS-Federación ("wsignin1.0").

SignOutQueryString

Obtiene o establece una cadena de consulta que contiene los parámetros adicionales que se van a enviar en las solicitudes de cierre de sesión de WS-Federation ("wsignout1.0").

SignOutReply

Obtiene o establece el valor del parámetro wreply que se usa durante las solicitudes de inicio de sesión de WS-Federation ("wsignout1.0").

XmlDictionaryReaderQuotas

Obtiene o establece el objeto XmlDictionaryReaderQuotas que se usa al deserializar los mensajes de respuesta de inicio de sesión de WS-Federation para obtener el token emitido por el servicio de token de seguridad (STS).

Métodos

CanReadSignInResponse(HttpRequestBase)

Devuelve un valor que indica si la solicitud HTTP especificada es un mensaje de respuesta de inicio de sesión en WS-Federation. Si el mensaje es un mensaje de limpieza de cierre de sesión de WS-Federation ("wsignoutcleanup1.0"), este método procesa la solicitud.

CanReadSignInResponse(HttpRequestBase, Boolean)

Devuelve un valor que indica si la solicitud HTTP especificada es un mensaje de respuesta de inicio de sesión en WS-Federation. Si el mensaje es un mensaje de limpieza de cierre de sesión de WS-Federation ("wsignoutcleanup1.0"), este método procesa la solicitud.

CreateSignInRequest(String, String, Boolean)

Crea una solicitud de inicio de sesión de WS-Federation en el mensaje de solicitud usando los parámetros de WS-Federation configurados en el módulo.

Dispose()

Libera los recursos (salvo memoria) usados por la instancia actual de la clase HttpModuleBase.

(Heredado de HttpModuleBase)
Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
FederatedSignOut(Uri, Uri)

Cierra 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 indicado y los parámetros adicionales especificados.

GetHashCode()

Sirve como la 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 solicitada originalmente de la respuesta de inicio de sesión.

GetSecurityToken(HttpRequestBase)

Lee un token de seguridad en la solicitud HTTP especificada.

GetSecurityToken(SignInResponseMessage)

Lee un token de seguridad del mensaje de respuesta de inicio de sesión de WS-Federation 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 debe redirigir cuando se procesa una solicitud de limpieza de cierre de sesión de la WS-Federation (wsignoutcleanup1.0) que contiene un parámetro wreply.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetXmlTokenFromMessage(SignInResponseMessage)

Extrae el token emitido del mensaje de respuesta de inicio de sesión de WS-Federation especificado.

GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer)

Extrae el token emitido del mensaje de respuesta de inicio de sesión de WS-Federation usando el serializador especificado de la WS-Federation.

Init(HttpApplication)

Inicializa el módulo HTTP.

(Heredado de HttpModuleBase)
InitializeModule(HttpApplication)

Inicializa el módulo y lo prepara para controlar eventos del objeto de aplicación ASP.NET del módulo.

InitializePropertiesFromConfiguration()

Inicializa las propiedades del módulo basadas en 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 en WS-Federation.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OnAuthenticateRequest(Object, EventArgs)

Controla el AuthenticateRequest evento de la canalización de ASP.NET.

OnAuthorizationFailed(AuthorizationFailedEventArgs)

Genera el evento AuthorizationFailed.

OnEndRequest(Object, EventArgs)

Controla el EndRequest evento de la canalización de ASP.NET.

OnPostAuthenticateRequest(Object, EventArgs)

Controla el PostAuthenticateRequest evento 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 con 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) mediante el protocolo WS-Federation.

SignOut()

Cierra la sesión actual y solicita redirigirse de nuevo 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)

Cierra la sesión actual y solicita redirigirse de nuevo a la dirección URL especificada.

SignOut(String, Boolean)

Cierra la sesión actual y solicita redirigirse de nuevo a la dirección URL especificada.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
VerifyProperties()

Comprueba si las propiedades Issuer y Realm no están vacías y si la propiedad RequireHttps es true, los URI especificados para Issuer y Realm son conformes a HTTPS.

Eventos

AuthorizationFailed

Se produce cuando el módulo determina si debe redirigir el usuario al emisor configurado para autenticar.

RedirectingToIdentityProvider

Se produce cuando el módulo va a redirigir el usuario al proveedor de identidad.

SecurityTokenReceived

Se produce cuando se ha recibido un token de seguridad procedente de un servicio de token de seguridad (STS).

SecurityTokenValidated

Se produce después de que un token de seguridad recibido del servicio de token de seguridad (STS) se haya validado pero antes de la creación del token de seguridad de la sesión.

SessionSecurityTokenCreated

Se produce cuando se ha creado un token de seguridad de la sesión a partir del token de seguridad recibido procedente de un servicio de token de seguridad (STS).

SignedIn

Se produce una vez ha iniciado sesión el usuario.

SignedOut

Tiene lugar inmediatamente después de eliminar la sesión durante el cierre.

SignInError

Se genera al producirse un error durante el inicio de sesión.

SigningOut

Se produce antes de eliminar la sesión durante su cierre.

SignOutError

Se genera al producirse un error durante el cierre de sesión.

Se aplica a