Partilhar via


SecurityTokenHandler.ReadToken Método

Definição

Quando substituído em uma classe derivada, desserializa o XML especificado para um token do tipo processado pela classe derivada.

Sobrecargas

ReadToken(String)

Quando substituído em uma classe derivada, desserializa a cadeia de caracteres especificada para um token do tipo processado pela classe derivada.

ReadToken(XmlReader)

Quando substituído em uma classe derivada, desserializa o XML referenciado pelo leitor XML especificado para um token do tipo processado pela classe derivada.

ReadToken(XmlReader, SecurityTokenResolver)

Quando substituído em uma classe derivada, desserializa o XML referenciado pelo leitor de XML especificado para um token do tipo processado pela classe derivada 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.

public:
 virtual System::IdentityModel::Tokens::SecurityToken ^ ReadToken(System::String ^ tokenString);
public virtual System.IdentityModel.Tokens.SecurityToken ReadToken (string tokenString);
abstract member ReadToken : string -> System.IdentityModel.Tokens.SecurityToken
override this.ReadToken : string -> System.IdentityModel.Tokens.SecurityToken
Public Overridable Function ReadToken (tokenString As String) As SecurityToken

Parâmetros

tokenString
String

A cadeia de caracteres a ser desserializada.

Retornos

O token de segurança que foi desserializado da cadeia de caracteres especificada.

Comentários

Importante

Chamar este método quando você tiver dados não confiáveis é um risco à segurança. Chame esse método apenas quando você tiver dados confiáveis. Para obter mais informações, consulte Validar todas as entradas.

Por padrão, esse método gera uma NotImplementedException exceção.

Substitua esse método para fornecer funcionalidade que pode desserializar um token de segurança de uma cadeia de caracteres. Se você substituir esse método, também deverá substituir o SecurityTokenHandler.CanReadToken método .

Aplica-se a

ReadToken(XmlReader)

Quando substituído em uma classe derivada, desserializa o XML referenciado pelo leitor XML especificado para um token do tipo processado pela classe derivada.

public:
 virtual System::IdentityModel::Tokens::SecurityToken ^ ReadToken(System::Xml::XmlReader ^ reader);
public virtual System.IdentityModel.Tokens.SecurityToken ReadToken (System.Xml.XmlReader reader);
abstract member ReadToken : System.Xml.XmlReader -> System.IdentityModel.Tokens.SecurityToken
override this.ReadToken : System.Xml.XmlReader -> System.IdentityModel.Tokens.SecurityToken
Public Overridable Function ReadToken (reader As XmlReader) As SecurityToken

Parâmetros

reader
XmlReader

Um leitor XML posicionado no elemento inicial do token.

Retornos

O token de segurança que foi desserializado do XML.

Exemplos

O código a seguir mostra como substituir o ReadToken método para ler um token personalizado do leitor XML especificado. O código é obtido do Custom Token exemplo. Este exemplo fornece classes personalizadas que permitem o processamento de SWT (Tokens Web Simples). Para obter informações sobre este exemplo e outros exemplos disponíveis para WIF e onde baixá-los, consulte Índice de exemplo de código WIF.

/// <summary>
/// Reads a serialized token and converts it into a <see cref="SecurityToken"/>.
/// </summary>
/// <param name="reader">An XML reader positioned at the token's start element.</param>
/// <returns>The parsed form of the token.</returns>
public override SecurityToken ReadToken( XmlReader reader )
{
    if ( reader == null )
    {
        throw new ArgumentNullException( "reader" );
    }

    XmlDictionaryReader dictionaryReader = XmlDictionaryReader.CreateDictionaryReader(reader);

    byte[] binaryData;
    string encoding = dictionaryReader.GetAttribute( EncodingType );
    if ( encoding == null || encoding == Base64EncodingType )
    {
        dictionaryReader.Read();
        binaryData = dictionaryReader.ReadContentAsBase64();
    }
    else
    {
        throw new SecurityTokenException(
            "Cannot read SecurityToken as its encoding is" + encoding + ". Expected a BinarySecurityToken with base64 encoding.");
    }
    
    string serializedToken = Encoding.UTF8.GetString(binaryData);

    return ReadSecurityTokenFromString(serializedToken);
}
/// <summary>
/// Parse the string token and generates a <see cref="SecurityToken"/>.
/// </summary>
/// <param name="serializedToken">The serialized form of the token received.</param>
/// <returns>The parsed form of the token.</returns>
protected SecurityToken ReadSecurityTokenFromString( string serializedToken )
{
    if (String.IsNullOrEmpty(serializedToken))
    {
        throw new ArgumentException("The parameter 'serializedToken' cannot be null or empty string.");
    }

    // Create a collection of SWT name value pairs
    NameValueCollection properties = ParseToken( serializedToken );
    SimpleWebToken swt = new SimpleWebToken( properties, serializedToken );

    return swt;
}
/// <summary>
/// Parses the token into a collection.
/// </summary>
/// <param name="encodedToken">The serialized token.</param>
/// <returns>A colleciton of all name-value pairs from the token.</returns>
NameValueCollection ParseToken( string encodedToken )
{
    if ( String.IsNullOrEmpty( encodedToken ) )
    {
        throw new ArgumentException( "The parameter 'encodedToken' cannot be null or empty string.");
    }

    NameValueCollection keyValuePairs = new NameValueCollection();
    foreach ( string nameValue in encodedToken.Split( ParameterSeparator ) )
    {
        string[] keyValueArray = nameValue.Split( '=' );

        if ( ( keyValueArray.Length < 2 ) || String.IsNullOrEmpty( keyValueArray[0] ) )
        {
            throw new SecurityTokenException("The incoming token was not in an expected format.");
        }

        // Names must be decoded for the claim type case
        string key = HttpUtility.UrlDecode( keyValueArray[0].Trim() );

        // remove any unwanted "
        string value = HttpUtility.UrlDecode( keyValueArray[1].Trim().Trim( '"' ) ); 
        keyValuePairs.Add( key, value );
    }

    return keyValuePairs;
}

Comentários

Importante

Chamar este método quando você tiver dados não confiáveis é um risco à segurança. Chame esse método apenas quando você tiver dados confiáveis. Para obter mais informações, consulte Validar todas as entradas.

Por padrão, esse método gera uma NotImplementedException exceção.

Substitua esse método para fornecer a lógica para desserializar um token de segurança do XML. Se você substituir esse método, também deverá substituir o SecurityTokenHandler.CanReadToken método . Normalmente, em classes derivadas, se o método não puder desserializar o token do XML referenciado, ele gerará um XmlException.

Aplica-se a

ReadToken(XmlReader, SecurityTokenResolver)

Quando substituído em uma classe derivada, desserializa o XML referenciado pelo leitor de XML especificado para um token do tipo processado pela classe derivada usando o resolvedor de token especificado.

public:
 virtual System::IdentityModel::Tokens::SecurityToken ^ ReadToken(System::Xml::XmlReader ^ reader, System::IdentityModel::Selectors::SecurityTokenResolver ^ tokenResolver);
public virtual System.IdentityModel.Tokens.SecurityToken ReadToken (System.Xml.XmlReader reader, System.IdentityModel.Selectors.SecurityTokenResolver tokenResolver);
abstract member ReadToken : System.Xml.XmlReader * System.IdentityModel.Selectors.SecurityTokenResolver -> System.IdentityModel.Tokens.SecurityToken
override this.ReadToken : System.Xml.XmlReader * System.IdentityModel.Selectors.SecurityTokenResolver -> System.IdentityModel.Tokens.SecurityToken
Public Overridable Function ReadToken (reader As XmlReader, tokenResolver As SecurityTokenResolver) As SecurityToken

Parâmetros

reader
XmlReader

Um leitor XML posicionado no elemento inicial do token.

tokenResolver
SecurityTokenResolver

Um resolvedor de token que contém tokens fora de banda e armazenados em cache.

Retornos

O token de segurança que foi desserializado do XML.

Comentários

Importante

Chamar este método quando você tiver dados não confiáveis é um risco à segurança. Chame esse método apenas quando você tiver dados confiáveis. Para obter mais informações, consulte Validar todas as entradas.

A implementação padrão ignora o tokenResolver parâmetro e delega a chamada para o SecurityTokenHandler.ReadToken método .

Substitua esse método para fornecer a lógica para desserializar um token de segurança do XML. Se você substituir esse método, também deverá substituir o SecurityTokenHandler.CanReadToken método . Normalmente, em classes derivadas, se o método não puder desserializar o token do XML referenciado, ele gerará um XmlException.

Aplica-se a