WSFederationAuthenticationModule Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
O WSFederationAuthenticationModule é um módulo HTTP utilizado para proteger uma aplicação ASP.NET, aplicando definições federadas de autenticação nos pedidos recebidos. O WSFederationAuthenticationModule é o principal módulo que a WIF oferece de fábrica para tratar o acesso de identidade baseado em sinistros em ASP.NET aplicações.
O WSFederationAuthenticationModule gera vários eventos, o que permite aos programadores ASP.NET alterar o comportamento padrão e controlar os detalhes de como a autenticação e o processamento de reclamações são realizados. A WSFederationAuthenticationModule funcionalidade está dividida em métodos específicos para cada tarefa.
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
- Herança
Exemplos
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");
}
Observações
A WSFederationAuthenticationModule classe implementa um módulo HTTP conhecido como WS-Federation Authentication Module (WSFAM). O WSFAM é implementado de fábrica pela Windows Identity Foundation (WIF). O WSFAM é adicionado ao pipeline de ASP.NET fazendo uma entrada no ficheiro web.config. Deriva de HttpModuleBase, que implementa IHttpModule. Regista-se no tempo de execução ASP.NET para ouvir os eventos EndRequest e AuthenticateRequest. Ao ouvir o EndRequest evento, a WSFAM redireciona os clientes para um serviço de token de segurança (STS) para obter um token de segurança quando a autorização falha num recurso solicitado. Ouvir o AuthenticateRequest evento permite ao WSFAM monitorizar os pedidos HTTP para uma resposta do STS que contenha o token solicitado. Quando tal token está presente e válido, cria uma instância de ClaimsPrincipal para o utilizador autenticado usando as reivindicações presentes no token.
Ao utilizar o WSFAM, a gestão de sessões é fornecida por um módulo de autenticação de sessão (SAM), que é uma instância da SessionAuthenticationModule classe, ou uma classe derivada dela. O SAM também é adicionado ao pipeline ASP.NET no ficheiro de configuração. O SAM monitoriza pedidos de cookies de autenticação (sessão). Quando estes cookies estão presentes e válidos, o módulo extrai o ClaimsPrincipal para o utilizador autenticado a partir do SessionSecurityToken e define a HttpContext.User propriedade e as propriedades principais Thread.CurrentPrincipal do thread.
A WSFAM oferece:
A capacidade de uma aplicação ASP.NET externalizar a autenticação para um serviço de token de segurança (STS) utilizando o protocolo WS-Federation. A identidade pode ser federada através de um ou mais domínios de identidade e envolver múltiplos STS.
Identidade baseada em reclamações para aplicações ASP.NET. Durante a autenticação, o WSFAM constrói um principal a partir das reivindicações no token de segurança enviadas pelo STS e define esse principal de reivindicações como principal do thread. Pode então usar este princípio para tomar decisões adicionais de autorização, apresentação e lógica sobre o utilizador que representa no seu código.
O WSFAM expõe várias propriedades que fornecem parâmetros de mensagem por defeito para usar em WS-Federation pedidos de início e encerramento de sessão. Estas propriedades são normalmente inicializadas a partir do <elemento wsFederation> num ficheiro de configuração. As mais importantes destas propriedades são:
A Issuer propriedade, que especifica o endereço do serviço de token de segurança (STS) para o qual enviar WS-Federation pedidos de entrada e saída.
A Realm propriedade, que especifica o parâmetro wtrealm a usar em pedidos de início de sessão WS-Federation. O parâmetro wtrealm identifica o domínio de segurança da parte confiável (RP) da aplicação ao STS.
Os parâmetros da mensagem de início de sessão também podem ser alterados por pedido, fornecendo um delegado handler de eventos para o RedirectingToIdentityProvider evento.
Duas propriedades controlam o comportamento do módulo. Ambas estas propriedades são também tipicamente inicializadas a partir do <wsFederation> elemento em configuração.
A PassiveRedirectEnabled propriedade especifica se o módulo deve realizar redirecionamentos passivos para o STS para autenticação.
A PersistentCookiesOnPassiveRedirects propriedade especifica se as sessões devem ser persistentes. Se esta propriedade for definida como verdadeira, o SAM é usado para escrever um cookie de sessão para o cliente. Em pedidos subsequentes do cliente, o SAM fornece autenticação utilizando o token persistido no cookie da sessão.
O WSFAM gera vários eventos durante o início e o encerramento de sessão, que permitem aos programadores do ASP.NET alterar o comportamento padrão do módulo e controlar os detalhes de como a autenticação e o processamento das reclamações são realizados.
Os seguintes eventos são levantados antes do pedido de assinatura WS-Federation ser enviado ao STS:
AuthorizationFailed: Levantado quando o redirecionamento passivo está ativado e a autorização falha num recurso solicitado.
RedirectingToIdentityProvider: Levantado pouco antes do WSFAM enviar o pedido de assinatura WS-Federation ao STS. Pode usar este evento para alterar os parâmetros no pedido de iniciação de sessão.
Os seguintes eventos são apresentados quando uma resposta de login (token de segurança emitido) é recebida do STS:
SecurityTokenReceived: Levantado logo após o token de segurança enviado pelo STS ser lido da resposta.
SecurityTokenValidated: Levantado logo após o token ter sido validado. Pode usar este evento para filtrar, transformar ou adicionar reivindicações ao principal de reivindicações (ClaimsPrincipal) criado a partir do token de segurança.
SessionSecurityTokenCreated: Levantado pouco antes do token de sessão (SessionSecurityToken) criado a partir do principal de reivindicações ser usado para definir o principal do thread e o utilizador atual e é escrito no cookie da sessão. Dá-te a oportunidade de modificar o token da sessão ou ativar ou desativar a escrita do cookie da sessão.
SignedIn: Levantado no final da autenticação, logo após o principal da thread e o utilizador atual terem sido definidos.
SignInError: Elevado se ocorrer uma exceção durante o início de sessão. Pode cancelar o pedido e impedir que a exceção seja devolvida ao chamador.
Ao sair de uma sessão ou ao processar um pedido de limpeza de WS-Federation de saída de sessão (wsignoutcleanup1.0), são levantados os seguintes eventos:
SigningOut: Levantado pouco antes da sessão ser eliminada para permitir que realize qualquer limpeza que possa depender da sessão ou para cancelar o log-out.
SignedOut: Levantado logo após a sessão ter sido eliminada.
SignOutError: Elevado se ocorrer uma exceção durante o desligamento. Pode cancelar o log-out e impedir que a exceção seja devolvida ao chamador.
Note
Os eventos de saída não são levantados ao sair no STS ao chamar o FederatedSignOut método.
Existem duas formas de iniciar sessão num STS usando o WSFAM. A primeira é permitir redirecionamentos passivos através da PassiveRedirectEnabled propriedade. Neste caso, quando a autorização falha num recurso solicitado, em vez de devolver uma 401:Access Denied resposta ao cliente, o WSFAM constrói uma mensagem WS-Federation de pedido de entrada a partir das suas propriedades e redireciona o cliente para o STS para recuperar um token de segurança. A segunda forma é redirecionar explicitamente o cliente para o STS chamando o SignIn método a partir de uma página web ou controlo personalizado na sua aplicação. O SignIn método também utiliza as propriedades do WSFAM para construir o pedido de entrada.
Qualquer um dos métodos sobrecarregados SignOut pode ser usado para sair da sessão. Isto elimina o cookie de sessão no cliente. Não envia uma mensagem de deslido WS-Federation ("wsignout1.0") para o STS. Para sair no STS, deve usar o FederatedSignOut método.
A WSFAM trata WS-Federation pedidos de limpeza de desistência ("wsignoutcleanup1.0"), eliminando a sua sessão com o cliente. Se o parâmetro wreply na mensagem de limpeza de encerramento não estiver definido, o WSFAM devolve uma imagem de uma marca de verificação verde ao STS que enviou a mensagem. Esta funcionalidade pode ser usada por um STS como reconhecimento de que o RP completou a sua saída.
O WSFAM expõe a sua funcionalidade — por exemplo, o seu pipeline de processamento de pedidos — através de vários métodos específicos para cada tarefa. Pode sobrepor estes métodos em classes derivadas para alterar o comportamento do WSFAM.
Para ser utilizado, o módulo deve ser adicionado ao pipeline conforme no seguinte 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>
Uma vez configurado, os WSFederationAuthenticationModule eventos geram em várias fases do processamento de um pedido HTTP. Os programadores do ASP.NET podem gerir estes eventos no ficheiro global.asax.
Construtores
| Name | Description |
|---|---|
| WSFederationAuthenticationModule() |
Chamado por construtores em classes derivadas para inicializar a WSFederationAuthenticationModule classe. |
Propriedades
| Name | Description |
|---|---|
| AuthenticationType |
Obtém ou define o valor do parâmetro wauth para usar em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| FederationConfiguration |
Recebe ou define o FederationConfiguration objeto que está em efeito para o módulo atual. (Herdado de HttpModuleBase) |
| Freshness |
Obtém ou define o valor do parâmetro wfresh para usar em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| HomeRealm |
Obtém ou define o valor do parâmetro whr a usar em pedidos de login WS-Federation ("wsignin1.0"). |
| Issuer |
Recebe ou define um URI que identifica o emissor pretendido do token de segurança. |
| PassiveRedirectEnabled |
Recebe ou define um valor que especifica se o módulo está habilitado para iniciar redirecionamentos WS-Federation protocolo. |
| PersistentCookiesOnPassiveRedirects |
Recebe ou define um valor que especifica se um cookie de sessão persistente é emitido após autenticação bem-sucedida. |
| Policy |
Obtém ou define o valor do parâmetro wp a ser usado em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| Realm |
Obtém ou define o valor do parâmetro wtrealm a ser usado para WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| Reply |
Obtém ou define o valor do parâmetro wreply para usar em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| Request |
Obtém ou define o valor do parâmetro wreq para usar em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| RequestPtr |
Obtém ou define o valor do parâmetro wreqptr para usar em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| RequireHttps |
Recebe ou define um valor que especifica se a comunicação com o serviço de token de segurança (STS) deve usar o protocolo HTTPS. |
| Resource |
Obtém ou define o valor do parâmetro wres para usar em WS-Federation pedidos de início de sessão ("wsignin1.0"). |
| SignInContext |
Obtém ou define um valor de contexto específico da aplicação para ser incluído no parâmetro wctx em WS-Federation pedidos de iniciação de sessão. |
| SignInQueryString |
Recebe ou define uma cadeia de consulta que contém quaisquer parâmetros adicionais a serem enviados em pedidos de login WS-Federation ("wsignin1.0"). |
| SignOutQueryString |
Recebe ou define uma cadeia de consulta que contém quaisquer parâmetros adicionais a serem enviados em WS-Federation pedidos de encerramento ("wsignout1.0"). |
| SignOutReply |
Obtém ou define o valor do parâmetro wreply para usar durante WS-Federation pedidos de desligamento ("wsignout1.0"). |
| XmlDictionaryReaderQuotas |
Obtém ou define o XmlDictionaryReaderQuotas objeto para usar ao desserializar WS-Federation mensagens de resposta de início de sessão para obter o token emitido pelo serviço de token de segurança (STS). |
Métodos
| Name | Description |
|---|---|
| CanReadSignInResponse(HttpRequestBase, Boolean) |
Devolve um valor que indica se o pedido HTTP especificado é uma mensagem de resposta de início de sessão WS-Federation. Se a mensagem for uma mensagem de limpeza de WS-Federation de encerramento de sessão ("wsignoutcleanup1.0"), este método processa o pedido. |
| CanReadSignInResponse(HttpRequestBase) |
Devolve um valor que indica se o pedido HTTP especificado é uma mensagem de resposta de início de sessão WS-Federation. Se a mensagem for uma mensagem de limpeza de WS-Federation de encerramento de sessão ("wsignoutcleanup1.0"), este método processa o pedido. |
| CreateSignInRequest(String, String, Boolean) |
Cria uma mensagem de pedido de WS-Federation de início de sessão usando os parâmetros de WS-Federation configurados no módulo. |
| Dispose() |
Liberta os recursos (exceto memória) usados pela instância atual da HttpModuleBase classe. (Herdado de HttpModuleBase) |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| FederatedSignOut(Uri, Uri) |
Desliga-se no serviço de token de segurança (STS) especificado usando o protocolo WS-Federation. |
| GetFederationPassiveSignOutUrl(String, String, String) |
Devolve uma URL que representa um pedido de WS-Federation de saída de sessão dirigido ao emissor especificado e que contém o parâmetro wreply especificado e os parâmetros adicionais especificados. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetReferencedResult(String) |
Obtém o resultado da emissão (normalmente o token emitido) a partir da URL especificada. Resolve a URL especificada no parâmetro wresultptr numa mensagem de resposta de log-in. |
| GetReturnUrlFromResponse(HttpRequestBase) |
Extrai o URL da página que foi originalmente solicitada da resposta de iniciação de sessão. |
| GetSecurityToken(HttpRequestBase) |
Lê um token de segurança a partir do pedido HTTP especificado. |
| GetSecurityToken(SignInResponseMessage) |
Lê um token de segurança da mensagem de resposta de início de sessão da Federação WS especificada. |
| GetSessionTokenContext() |
Recebe uma string que deve ser mantida com o cookie de sessão na Context propriedade. |
| GetSignInResponseMessage(HttpRequestBase) |
Lê um SignInResponseMessage objeto do formulário POST representado pelo pedido HTTP especificado. |
| GetSignOutRedirectUrl(SignOutCleanupRequestMessage) |
Determina a URL para a qual redirecionar ao processar um pedido de limpeza de encerramento de WS-Federation (wsignoutcleanup1.0) que contém um parâmetro wreply. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer) |
Extrai o token emitido da mensagem de resposta de WS-Federation de início de sessão especificada usando o serializador de WS-Federation especificado. |
| GetXmlTokenFromMessage(SignInResponseMessage) |
Extrai o token emitido da mensagem especificada de WS-Federation de resposta de entrada. |
| Init(HttpApplication) |
Inicializa o módulo HTTP. (Herdado de HttpModuleBase) |
| InitializeModule(HttpApplication) |
Inicializa o módulo e prepara-o para lidar com eventos do objeto de aplicação ASP.NET do módulo. |
| InitializePropertiesFromConfiguration() |
Inicializa as propriedades do módulo com base na configuração especificada pela FederationConfiguration propriedade do módulo. |
| IsSignInResponse(HttpRequestBase) |
Recebe um valor que indica se o pedido especificado é uma mensagem de resposta de início de sessão WS-Federation. |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| OnAuthenticateRequest(Object, EventArgs) |
Gere o evento AuthenticateRequest do pipeline de ASP.NET. |
| OnAuthorizationFailed(AuthorizationFailedEventArgs) |
Eleva o AuthorizationFailed evento. |
| OnEndRequest(Object, EventArgs) |
Gere o evento EndRequest do pipeline de ASP.NET. |
| OnPostAuthenticateRequest(Object, EventArgs) |
Gere o evento PostAuthenticateRequest do pipeline de ASP.NET. |
| OnRedirectingToIdentityProvider(RedirectingToIdentityProviderEventArgs) |
Eleva o RedirectingToIdentityProvider evento. |
| OnSessionSecurityTokenCreated(SessionSecurityTokenCreatedEventArgs) |
Eleva o SessionSecurityTokenCreated evento. |
| OnSignedIn(EventArgs) |
Eleva o SignedIn evento. |
| OnSignedOut(EventArgs) |
Eleva o SignedOut evento. |
| OnSignInError(ErrorEventArgs) |
Eleva o SignInError evento. |
| OnSigningOut(SigningOutEventArgs) |
Eleva o SigningOut evento. |
| OnSignOutError(ErrorEventArgs) |
Eleva o SignOutError evento. |
| RedirectToIdentityProvider(String, String, Boolean) |
Redireciona o utilizador para o serviço de token de segurança (STS) especificado pela Issuer propriedade para obter um token de segurança usando o protocolo WS-Federation. |
| SetPrincipalAndWriteSessionToken(SessionSecurityToken, Boolean) |
Define o principal do thread e, opcionalmente, escreve o cookie da sessão. |
| SignIn(String) |
Realiza o início de sessão num serviço de token de segurança (STS) através do protocolo WS-Federation. |
| SignOut() |
Desliga-se da sessão atual e solicita um redirecionamento de volta para a URL especificada no pedido HTTP atual. |
| SignOut(Boolean) |
Termina a sessão em curso e levanta os eventos apropriados. |
| SignOut(String, Boolean) |
Desliga-se da sessão atual e solicita um redirecionamento de volta para a URL especificada. |
| SignOut(String) |
Desliga-se da sessão atual e solicita um redirecionamento de volta para a URL especificada. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
| VerifyProperties() |
Verifica que as Issuer propriedades e Realm não são vazias e que, se a RequireHttps propriedade for |
evento
| Name | Description |
|---|---|
| AuthorizationFailed |
Ocorre quando o módulo está a determinar se deve redirecionar o utilizador para o emissor configurado para autenticação. |
| RedirectingToIdentityProvider |
Ocorre quando o módulo vai redirecionar o utilizador para o fornecedor de identidade. |
| SecurityTokenReceived |
Ocorre quando um token de segurança foi recebido de um serviço de token de segurança (STS). |
| SecurityTokenValidated |
Ocorre depois de um token de segurança recebido do serviço de token de segurança (STS) ter sido validado, mas antes de o token de segurança da sessão ser criado. |
| SessionSecurityTokenCreated |
Ocorre quando um token de segurança de sessão foi criado a partir do token de segurança recebido de um serviço de token de segurança (STS). |
| SignedIn |
Ocorre depois de o utilizador iniciar sessão. |
| SignedOut |
Acontece logo após a eliminação da sessão durante a saída de sessão. |
| SignInError |
É ativado quando ocorre um erro durante o início de sessão. |
| SigningOut |
Ocorre antes de apagar a sessão durante o desligamento. |
| SignOutError |
É elevado quando ocorre um erro durante a saída de logout. |