SessionSecurityTokenHandler Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Um SecurityTokenHandler que processa tokens de segurança do tipo SessionSecurityToken.
public ref class SessionSecurityTokenHandler : System::IdentityModel::Tokens::SecurityTokenHandler
public class SessionSecurityTokenHandler : System.IdentityModel.Tokens.SecurityTokenHandler
type SessionSecurityTokenHandler = class
inherit SecurityTokenHandler
Public Class SessionSecurityTokenHandler
Inherits SecurityTokenHandler
- Herança
- Derivado
Exemplos
O XML a seguir mostra como substituir o manipulador de token de segurança de sessão padrão em uma coleção de manipuladores de token por uma instância da MachineKeySessionSecurityTokenHandler classe na configuração.
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
Comentários
A SessionSecurityTokenHandler classe serializa, desserializa e valida tokens de sessão. Tokens de sessão são tokens do tipo SessionSecurityToken. A SessionSecurityTokenHandler classe serializa os tokens de e para o formato de cookie. Por padrão, a classe serializa tokens em elementos WS-Secure Conversation Feb2005 ou WS-Secure Conversation 1.3 <wsc:SecurityContextToken>
. Os tokens de sessão são usados pelo WSFederationAuthenticationModule (WSFAM) e pelo SessionAuthenticationModule (SAM) para armazenar informações sobre uma sessão, isso é principalmente o ClaimsPrincipal associado ao usuário autenticado e aos tempos de início e expiração da sessão.
Em cenários passivos, as WSFederationAuthenticationModule chamadas para o SessionAuthenticationModule (SAM) do pipeline de autenticação para criar um token de sessão do ClaimsPrincipal que representa o usuário autenticado. O SAM usa o configurado SessionSecurityTokenHandler para criar o token e serializá-lo em um cookie (e desserializar o token de um cookie em solicitações subsequentes). O SAM usa uma instância de sua classe configurada CookieHandler para gravar o cookie de volta na resposta HTTP. Em seguida, esse cookie é retornado ao cliente e, em solicitações subsequentes, o cliente pode apresentar o cookie em vez de fazer uma viagem de ida e volta para o provedor de identidade para obter novamente um token de segurança. Para obter mais informações sobre como as sessões operam com o WIF, consulte Gerenciamento de sessão wif.
Observação
O <elemento de configuração securityTokenHandlers> pode ser usado para especificar um SessionSecurityTokenHandler que tenha a responsabilidade de proteger as sessões do aplicativo. Os desenvolvedores devem ter cuidado ao alterar essa configuração, pois um sistema configurado incorretamente pode resultar em comprometimento do aplicativo. Por exemplo, especificar uma coleção derivada SessionSecurityTokenHandler e passar uma coleção de Transformações vazias (CookieTransform) para a base resultaria na serialização da identidade dos usuários em um cookie que não estava protegido. Isso pode permitir que um invasor modifique a identidade e, portanto, altere os privilégios de acesso.
Se o token de sessão estiver no modo de referência, ou seja, sua SessionSecurityToken.IsReferenceMode propriedade será true
, o manipulador de token de sessão serializará apenas as propriedades do token de sessão necessárias para regenerar sua chave no SessionSecurityTokenCache. No caso padrão, a SessionSecurityTokenCacheKey classe é usada para representar chaves de cache e o manipulador de token grava as SessionSecurityToken.ContextId propriedades e SessionSecurityToken.KeyGeneration do token. Se o token de sessão não estiver no modo de referência, ou seja, a SessionSecurityToken.IsReferenceMode propriedade será false
, então, além das propriedades mencionadas anteriormente, o manipulador invocará o ApplyTransforms método em uma matriz de bytes serializada do token e armazenará o valor resultante no cookie também. Para obter mais detalhes sobre como o token é serializado, consulte o SessionSecurityTokenHandler.WriteToken(XmlWriter, SecurityToken) método .
A Transforms propriedade obtém a lista de transformações que são aplicadas ao token de sessão no ApplyTransforms método . Todas as transformações derivam da CookieTransform classe . No caso padrão, o DeflateCookieTransform e o ProtectedDataCookieTransform são aplicados. O ProtectedDataCookieTransform usa a API de Proteção de Dados (DPAPI) para proteger o material de cookie. O DPAPI usa uma chave específica para o computador no qual está em execução em seus algoritmos de proteção. Por esse motivo, o manipulador de token de sessão padrão não é utilizável em cenários de web farm porque, nesses cenários, os tokens gravados em um computador podem precisar ser lidos em outro computador. Você pode usar muitas estratégias para contornar esse problema. Por exemplo, você pode:
Substitua o padrão SessionSecurityTokenHandler pelo MachineKeySessionSecurityTokenHandler. O MachineKeySessionSecurityTokenHandler permite especificar chaves de assinatura e criptografia no elemento ASP.NET
<machineKey>
no arquivo de configuração.Forneça um manipulador para o FederatedAuthentication.FederationConfigurationCreated evento no arquivo global.asax.cs e substitua o manipulador de token de sessão padrão por uma instância do SessionSecurityTokenHandler que tem uma lista de transformações que inclui o RsaSignatureCookieTransform e o RsaEncryptionCookieTransform. Você pode criar a nova instância invocando um dos construtores que usa uma lista de transformações.
Derive uma transformação personalizada da CookieTransform classe base e use o método acima para incluí-la na lista de transformações a serem aplicadas.
Derive um manipulador de token personalizado de SessionSecurityTokenHandler e implemente seu próprio mecanismo.
Para obter mais informações sobre como usar sessões em cenários de web farm, consulte WIF e Web Farms.
O SessionSecurityTokenHandler está incluído na coleção de manipuladores de token padrão; no entanto, você pode substituí-lo por um manipulador de token de sessão personalizado especificando primeiro um <elemento remove> sob o <elemento securityTokenHandlers> para remover o manipulador padrão da coleção e, em seguida, adicionar seu manipulador de token personalizado usando o <elemento add> . Por padrão, você pode especificar o tempo de vida do token padrão incluindo o <elemento sessionTokenRequirement> no <add>
elemento . Você pode criar um manipulador de token personalizado para usar elementos de configuração personalizados sob o <add>
elemento substituindo o LoadCustomConfiguration método para fornecer a lógica para processá-los.
Construtores
SessionSecurityTokenHandler() |
Inicializa uma nova instância da classe SessionSecurityTokenHandler que usa as transformações de cookie e tempo de vida do token padrão. |
SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>) |
Inicializa uma nova instância da classe SessionSecurityTokenHandler que usa as transformações de cookie especificadas. |
SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>, TimeSpan) |
Inicializa uma nova instância da classe SessionSecurityTokenHandler que usa as transformações de cookie e tempo de vida do token especificados. |
Campos
DefaultCookieTransforms |
A coleção somente leitura que contém a lista de transformações padrão a serem aplicadas a cookies, o DeflateCookieTransform e o ProtectedDataCookieTransform. |
DefaultLifetime |
Uma constante que especifica o tempo de vida padrão de cookies, dez horas. |
Propriedades
CanValidateToken |
Obtém um valor que indica se esse manipulador é compatível com a validação de tokens do tipo SessionSecurityToken. |
CanWriteToken |
Obtém um valor que indica se esse manipulador é capaz de gravar tokens do tipo SessionSecurityToken. |
Configuration |
Obtém ou define o objeto SecurityTokenHandlerConfiguration que fornece a configuração para a instância atual. (Herdado de SecurityTokenHandler) |
ContainingCollection |
Obtém a coleção de manipuladores de token que contém a instância atual. (Herdado de SecurityTokenHandler) |
CookieElementName |
Obtém o nome do elemento de cookie. |
CookieNamespace |
Obtém o namespace do elemento de cookie. |
DefaultTokenLifetime |
Obtém o tempo de vida de token padrão. |
TokenLifetime |
Obtém ou define o tempo de vida do token. |
TokenType |
Obtém o tipo dos tokens que esse manipulador processa. |
Transforms |
Obtém as transformações que serão aplicadas ao cookie. |
Métodos
ApplyTransforms(Byte[], Boolean) |
Aplica as transformações especificadas pela propriedade Transforms para codificar ou decodificar o cookie especificado. |
CanReadKeyIdentifierClause(XmlReader) |
Retorna um valor que indica que se o elemento XML consultado pelo leitor de XML especificado é uma cláusula de identificador de chave que pode ser desserializada por esta instância. (Herdado de SecurityTokenHandler) |
CanReadToken(String) |
Retorna um valor que indica se a cadeia de caracteres especificada pode ser desserializada como um token do tipo processado por esta instância. (Herdado de SecurityTokenHandler) |
CanReadToken(XmlReader) |
Retorna um valor que indica se o leitor está posicionado em um elemento |
CanWriteKeyIdentifierClause(SecurityKeyIdentifierClause) |
Retorna um valor que indica se a cláusula de identificador de chave especificada pode ser serializada por esta instância. (Herdado de SecurityTokenHandler) |
CreateSecurityTokenReference(SecurityToken, Boolean) |
Quando substituído em uma classe derivada, cria a referência de token de segurança para tokens processados por essa classe. Este método é geralmente chamado por um STS (serviço de token de segurança). (Herdado de SecurityTokenHandler) |
CreateSessionSecurityToken(ClaimsPrincipal, String, String, DateTime, DateTime) |
Cria um SessionSecurityToken com base na entidade de declarações e intervalo de tempo especificados durante o qual o token é válido. |
CreateToken(SecurityTokenDescriptor) |
Cria um token de segurança com base no descritor de token especificado. |
DetectReplayedToken(SecurityToken) |
Quando substituído em uma classe derivada, gera uma exceção se o token especificado é detectado como sendo reproduzido. (Herdado de SecurityTokenHandler) |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetTokenTypeIdentifiers() |
Obtém os URIs de tipo de token para os tipos de token que podem ser processados por esse manipulador. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
LoadCustomConfiguration(XmlNodeList) |
Carrega a configuração personalizada do XML. |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
ReadKeyIdentifierClause(XmlReader) |
Quando substituído em uma classe derivada, desserializa o XML referenciado pelo leitor de XML especificado para uma cláusula de identificador de chave que referencia um token processado pela classe derivada. (Herdado de SecurityTokenHandler) |
ReadToken(Byte[], SecurityTokenResolver) |
Lê o SessionSecurityToken de um fluxo de bytes usando o resolvedor de token especificado. |
ReadToken(String) |
Quando substituído em uma classe derivada, desserializa a cadeia de caracteres especificada para um token do tipo processado pela classe derivada. (Herdado de SecurityTokenHandler) |
ReadToken(XmlReader) |
Lê o SessionSecurityToken usando o leitor de XML especificado. |
ReadToken(XmlReader, SecurityTokenResolver) |
Lê o SessionSecurityToken usando o resolvedor de token e o leitor XML especificado. |
SetTransforms(IEnumerable<CookieTransform>) |
Define as transformações que serão aplicadas aos cookies. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
TraceTokenValidationFailure(SecurityToken, String) |
Rastreia o evento de falha durante a validação dos tokens de segurança quando o rastreamento está habilitado. (Herdado de SecurityTokenHandler) |
TraceTokenValidationSuccess(SecurityToken) |
Rastreia a validação bem-sucedida do evento de tokens de segurança quando o rastreamento está habilitado. (Herdado de SecurityTokenHandler) |
ValidateSession(SessionSecurityToken) |
Determina se a sessão associada ao token especificado ainda é válida. A validade é determinada verificando as propriedades ValidFrom e ValidTo do token especificado. Uma exceção é gerada se a sessão não for mais válida. |
ValidateToken(SecurityToken) |
Valida o token especificado e retorna suas declarações. |
ValidateToken(SessionSecurityToken, String) |
Valida o token de sessão especificado e retorna suas declarações. |
WriteKeyIdentifierClause(XmlWriter, SecurityKeyIdentifierClause) |
Quando substituído em uma classe derivada, serializa a cláusula de identificador de chave especificado no XML. A cláusula do identificador de chave deve ser do tipo com suporte na classe derivada. (Herdado de SecurityTokenHandler) |
WriteToken(SecurityToken) |
Quando substituído em uma classe derivada, serializa o token de segurança especificado em uma cadeia de caracteres. O token deve ser do tipo processado pela classe derivada. (Herdado de SecurityTokenHandler) |
WriteToken(SessionSecurityToken) |
Serializa o token especificado em uma matriz de bytes. |
WriteToken(XmlWriter, SecurityToken) |
Serializa o token especificado usando o gravador XML especificado. |