Condividi tramite


SecurityTokenHandler.ReadToken Metodo

Definizione

Una volta eseguito l'override in una classe derivata, deserializza l'XML specificato in un token del tipo elaborato dalla classe derivata.

Overload

ReadToken(String)

Una volta eseguito l'override in una classe derivata, deserializza la stringa specificata in un token del tipo elaborato dalla classe derivata.

ReadToken(XmlReader)

Una volta eseguito l'override in una classe derivata, deserializza l'XML cui si fa riferimento dal lettore XML specificato in un token del tipo elaborato dalla classe derivata.

ReadToken(XmlReader, SecurityTokenResolver)

Una volta eseguito l'override in una classe derivata, deserializza l'XML cui si fa riferimento dal lettore XML specificato in un token del tipo elaborato dalla classe derivata utilizzando il resolver di token specificato.

ReadToken(String)

Una volta eseguito l'override in una classe derivata, deserializza la stringa specificata in un token del tipo elaborato dalla classe derivata.

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

Parametri

tokenString
String

Stringa da deserializzare.

Restituisce

Token di sicurezza deserializzato dalla stringa specificata.

Commenti

Importante

La chiamata a questo metodo con dati non attendibili costituisce un rischio per la sicurezza. Chiamare questo metodo solo con dati attendibili. Per altre informazioni, vedere Convalidare tutti gli input.

Per impostazione predefinita, questo metodo genera un'eccezione NotImplementedException .

Eseguire l'override di questo metodo per fornire funzionalità in grado di deserializzare un token di sicurezza da una stringa. Se si esegue l'override, questo metodo deve anche eseguire l'override del SecurityTokenHandler.CanReadToken metodo .

Si applica a

ReadToken(XmlReader)

Una volta eseguito l'override in una classe derivata, deserializza l'XML cui si fa riferimento dal lettore XML specificato in un token del tipo elaborato dalla classe derivata.

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

Parametri

reader
XmlReader

Lettore XML posizionato presso l'elemento iniziale del token.

Restituisce

Token di sicurezza deserializzato dal codice XML.

Esempio

Nel codice seguente viene illustrato come eseguire l'override del ReadToken metodo per leggere un token personalizzato dal lettore XML specificato. Il codice viene tratto dall'esempio Custom Token . Questo esempio fornisce classi personalizzate che consentono l'elaborazione di token Web semplici (SWT). Per informazioni su questo esempio e altri esempi disponibili per WIF e dove scaricarli, vedere Indice di esempio di codice 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;
}

Commenti

Importante

La chiamata a questo metodo con dati non attendibili costituisce un rischio per la sicurezza. Chiamare questo metodo solo con dati attendibili. Per altre informazioni, vedere Convalidare tutti gli input.

Per impostazione predefinita, questo metodo genera un'eccezione NotImplementedException .

Eseguire l'override di questo metodo per fornire la logica per deserializzare un token di sicurezza da XML. Se si esegue l'override di questo metodo, è necessario eseguire anche l'override del SecurityTokenHandler.CanReadToken metodo . In genere, nelle classi derivate, se il metodo non può deserializzare il token dal codice XML a cui si fa riferimento, genera un'eccezione XmlException.

Si applica a

ReadToken(XmlReader, SecurityTokenResolver)

Una volta eseguito l'override in una classe derivata, deserializza l'XML cui si fa riferimento dal lettore XML specificato in un token del tipo elaborato dalla classe derivata utilizzando il resolver di token specificato.

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

Parametri

reader
XmlReader

Lettore XML posizionato presso l'elemento iniziale del token.

tokenResolver
SecurityTokenResolver

Resolver di token che contiene i token fuori banda e memorizzati nella cache.

Restituisce

Token di sicurezza deserializzato dal codice XML.

Commenti

Importante

La chiamata a questo metodo con dati non attendibili costituisce un rischio per la sicurezza. Chiamare questo metodo solo con dati attendibili. Per altre informazioni, vedere Convalidare tutti gli input.

L'implementazione predefinita ignora il tokenResolver parametro e delega la chiamata al SecurityTokenHandler.ReadToken metodo .

Eseguire l'override di questo metodo per fornire la logica per deserializzare un token di sicurezza da XML. Se si esegue l'override di questo metodo, è necessario eseguire anche l'override del SecurityTokenHandler.CanReadToken metodo . In genere, nelle classi derivate, se il metodo non può deserializzare il token dal codice XML a cui si fa riferimento, genera un'eccezione XmlException.

Si applica a