Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo SecurityTokenHandler.ReadToken (XmlReader)

.NET Framework (current version)
 

Data di pubblicazione: novembre 2016

Quando sottoposto a override in una classe derivata, deserializza il documento XML a cui fa riferimento il lettore XML specificato per un token del tipo elaborato dalla classe derivata.

Spazio dei nomi:   System.IdentityModel.Tokens
Assembly:  System.IdentityModel (in System.IdentityModel.dll)

public virtual SecurityToken ReadToken(
	XmlReader reader
)

Parametri

reader
Type: System.Xml.XmlReader

Lettore XML posizionato in corrispondenza dell'elemento iniziale del token.

Valore restituito

Type: System.IdentityModel.Tokens.SecurityToken

Il token di sicurezza che è stato deserializzato dal formato XML.

System_CAPS_security Sicurezza Nota

Questo metodo con dati non attendibili implica un rischio di sicurezza. Chiamare questo metodo solo con dati attendibili. Per ulteriori informazioni, vedere Untrusted Data Security Risks.

Per impostazione predefinita, questo metodo genera un NotImplementedException (eccezione).

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, di eseguire l'override di SecurityTokenHandler.CanReadToken metodo. In genere, nelle classi derivate, se il metodo non può deserializzare il token da XML cui viene fatto riferimento, viene generata una XmlException.

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

.NET Framework
Disponibile da 4.5
Torna all'inizio
Mostra: