SecurityTokenHandler.ReadToken Metoda

Definice

Při přepsání v odvozené třídě deserializuje zadaný XML na token typu zpracovaného odvozenou třídou.

Přetížení

Name Description
ReadToken(String)

Při přepsání v odvozené třídě deserializuje zadaný řetězec na token typu zpracovaného odvozenou třídou.

ReadToken(XmlReader)

Při přepsání v odvozené třídě deserializuje XML odkazovaný zadaným čtenářem XML na token typu zpracovávaného odvozenou třídou.

ReadToken(XmlReader, SecurityTokenResolver)

Při přepsání v odvozené třídě deserializuje XML odkazovaný zadaným čtenářem XML na token typu zpracovávaného odvozenou třídou pomocí zadaného překladače tokenu.

ReadToken(String)

Při přepsání v odvozené třídě deserializuje zadaný řetězec na token typu zpracovaného odvozenou třídou.

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

Parametry

tokenString
String

Řetězec, který má být deserializován.

Návraty

Token zabezpečení, který byl deserializován ze zadaného řetězce.

Poznámky

Important

Volání této metody s nedůvěryhodnými daty představuje bezpečnostní riziko. Volejte tuto metodu pouze s důvěryhodnými daty. Další informace naleznete v tématu Ověření všech vstupů.

Ve výchozím nastavení tato metoda vyvolá NotImplementedException výjimku.

Tuto metodu přepište tak, aby poskytovala funkce, které mohou deserializovat token zabezpečení z řetězce. Pokud tuto metodu SecurityTokenHandler.CanReadToken přepíšete, měli byste ji také přepsat.

Platí pro

ReadToken(XmlReader)

Při přepsání v odvozené třídě deserializuje XML odkazovaný zadaným čtenářem XML na token typu zpracovávaného odvozenou třídou.

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

Parametry

reader
XmlReader

Čtečka XML umístěná na počáteční prvek tokenu.

Návraty

Token zabezpečení, který byl deserializován z XML.

Příklady

Následující kód ukazuje, jak přepsat metodu ReadToken čtení vlastního tokenu ze zadané čtečky XML. Kód je převzat z ukázky Custom Token . Tato ukázka poskytuje vlastní třídy, které umožňují zpracování jednoduchých webových tokenů (SWT). Informace o této ukázce a dalších ukázkách, které jsou k dispozici pro WIF a kde je stáhnout, najdete v tématu Vzorový index kódu 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;
}

Poznámky

Important

Volání této metody s nedůvěryhodnými daty představuje bezpečnostní riziko. Volejte tuto metodu pouze s důvěryhodnými daty. Další informace naleznete v tématu Ověření všech vstupů.

Ve výchozím nastavení tato metoda vyvolá NotImplementedException výjimku.

Přepište tuto metodu tak, aby poskytovala logiku deserializace tokenu zabezpečení z XML. Pokud tuto metodu SecurityTokenHandler.CanReadToken přepíšete, měli byste ji také přepsat. Obvykle, v odvozených tříd, pokud metoda nemůže deserializovat token z odkazovaného XML, vyvolá výjimku XmlException.

Platí pro

ReadToken(XmlReader, SecurityTokenResolver)

Při přepsání v odvozené třídě deserializuje XML odkazovaný zadaným čtenářem XML na token typu zpracovávaného odvozenou třídou pomocí zadaného překladače tokenu.

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

Parametry

reader
XmlReader

Čtečka XML umístěná na počáteční prvek tokenu.

tokenResolver
SecurityTokenResolver

Překladač tokenů, který obsahuje vzdálené tokeny a tokeny uložené v mezipaměti.

Návraty

Token zabezpečení, který byl deserializován z XML.

Poznámky

Important

Volání této metody s nedůvěryhodnými daty představuje bezpečnostní riziko. Volejte tuto metodu pouze s důvěryhodnými daty. Další informace naleznete v tématu Ověření všech vstupů.

Výchozí implementace ignoruje tokenResolver parametr a deleguje volání metody SecurityTokenHandler.ReadToken .

Přepište tuto metodu tak, aby poskytovala logiku deserializace tokenu zabezpečení z XML. Pokud tuto metodu SecurityTokenHandler.CanReadToken přepíšete, měli byste ji také přepsat. Obvykle, v odvozených tříd, pokud metoda nemůže deserializovat token z odkazovaného XML, vyvolá výjimku XmlException.

Platí pro