Share via


SecurityTokenHandler.ReadToken Méthode

Définition

En cas de substitution dans une classe dérivée, désérialise le XML spécifié en un jeton du type traité par cette classe dérivée.

Surcharges

ReadToken(String)

En cas de substitution dans une classe dérivée, désérialise la chaîne spécifiée en un jeton du type traité par cette classe dérivée.

ReadToken(XmlReader)

En cas de substitution dans une classe dérivée, désérialise le XML référencé par le lecteur XML spécifié en un jeton du type traité par cette classe dérivée.

ReadToken(XmlReader, SecurityTokenResolver)

En cas de substitution dans une classe dérivée, désérialise le XML référencé par un lecteur XML spécifié en un jeton du type traité par cette classe dérivée à l'aide du lecteur XML et du programme de résolution de jetons spécifiés.

ReadToken(String)

En cas de substitution dans une classe dérivée, désérialise la chaîne spécifiée en un jeton du type traité par cette classe dérivée.

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

Paramètres

tokenString
String

Chaîne à désérialiser.

Retours

Jeton de sécurité qui a été désérialisé de la chaîne spécifiée.

Remarques

Important

L’appel de cette méthode avec des données non approuvées est un risque de sécurité. Appelez cette méthode avec des données approuvées uniquement. Pour plus d’informations, consultez Valider toutes les entrées.

Par défaut, cette méthode lève une NotImplementedException exception.

Remplacez cette méthode pour fournir des fonctionnalités qui peuvent désérialiser un jeton de sécurité à partir d’une chaîne. Si vous remplacez cette méthode, vous devez également remplacer la SecurityTokenHandler.CanReadToken méthode.

S’applique à

ReadToken(XmlReader)

En cas de substitution dans une classe dérivée, désérialise le XML référencé par le lecteur XML spécifié en un jeton du type traité par cette classe dérivée.

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

Paramètres

reader
XmlReader

Lecteur XML positionné au niveau de l'élément de début du jeton.

Retours

Jeton de sécurité qui a été désérialisé du XML.

Exemples

Le code suivant montre comment remplacer la ReadToken méthode pour lire un jeton personnalisé à partir du lecteur XML spécifié. Le code est extrait de l’exemple Custom Token . Cet exemple fournit des classes personnalisées qui permettent le traitement des jetons web simples (SWT). Pour plus d’informations sur cet exemple et d’autres exemples disponibles pour WIF et pour savoir où les télécharger, consultez Index d’exemple de code 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;
}

Remarques

Important

L’appel de cette méthode avec des données non approuvées est un risque de sécurité. Appelez cette méthode avec des données approuvées uniquement. Pour plus d’informations, consultez Valider toutes les entrées.

Par défaut, cette méthode lève une NotImplementedException exception.

Remplacez cette méthode pour fournir la logique permettant de désérialiser un jeton de sécurité à partir de XML. Si vous remplacez cette méthode, vous devez également remplacer la SecurityTokenHandler.CanReadToken méthode. En règle générale, dans les classes dérivées, si la méthode ne peut pas désérialiser le jeton à partir du code XML référencé, elle lève un XmlException.

S’applique à

ReadToken(XmlReader, SecurityTokenResolver)

En cas de substitution dans une classe dérivée, désérialise le XML référencé par un lecteur XML spécifié en un jeton du type traité par cette classe dérivée à l'aide du lecteur XML et du programme de résolution de jetons spécifiés.

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

Paramètres

reader
XmlReader

Lecteur XML positionné au niveau de l'élément de début du jeton.

tokenResolver
SecurityTokenResolver

Programme de résolution de jetons qui contient des jetons hors bande et mis en cache.

Retours

Jeton de sécurité qui a été désérialisé du XML.

Remarques

Important

L’appel de cette méthode avec des données non approuvées est un risque de sécurité. Appelez cette méthode avec des données approuvées uniquement. Pour plus d’informations, consultez Valider toutes les entrées.

L’implémentation par défaut ignore le tokenResolver paramètre et délègue l’appel à la SecurityTokenHandler.ReadToken méthode.

Remplacez cette méthode pour fournir la logique permettant de désérialiser un jeton de sécurité à partir de XML. Si vous remplacez cette méthode, vous devez également remplacer la SecurityTokenHandler.CanReadToken méthode. En règle générale, dans les classes dérivées, si la méthode ne peut pas désérialiser le jeton à partir du code XML référencé, elle lève un XmlException.

S’applique à