SecurityTokenHandler.ReadToken Methode

Definition

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, wird die angegebene XML auf ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird, deserialisiert.

Überlädt

Name Beschreibung
ReadToken(String)

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, wird die angegebene Zeichenfolge auf ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird, deserialisiert.

ReadToken(XmlReader)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird der XML-Code deserialisiert, auf den vom angegebenen XML-Reader verwiesen wird, auf ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird.

ReadToken(XmlReader, SecurityTokenResolver)

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, wird der XML-Code, auf den vom angegebenen XML-Reader verwiesen wird, auf ein Token des Typs festgelegt, der von der abgeleiteten Klasse mithilfe des angegebenen Tokenlösers verarbeitet wird.

ReadToken(String)

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, wird die angegebene Zeichenfolge auf ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird, deserialisiert.

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

Parameter

tokenString
String

Die Zeichenfolge, die deserialisiert werden soll.

Gibt zurück

Das Sicherheitstoken, das aus der angegebenen Zeichenfolge deserialisiert wurde.

Hinweise

Important

Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten ist ein Sicherheitsrisiko. Rufen Sie diese Methode nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter Überprüfen aller Eingaben.

Standardmäßig löst diese Methode eine NotImplementedException Ausnahme aus.

Überschreiben Sie diese Methode, um Funktionen bereitzustellen, die ein Sicherheitstoken aus einer Zeichenfolge deserialisieren können. Wenn Sie diese Methode außer Kraft setzen, sollten Sie die SecurityTokenHandler.CanReadToken Methode auch überschreiben.

Gilt für:

ReadToken(XmlReader)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird der XML-Code deserialisiert, auf den vom angegebenen XML-Reader verwiesen wird, auf ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird.

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

Parameter

reader
XmlReader

Ein XML-Reader, der am Startelement des Tokens positioniert ist.

Gibt zurück

Das Sicherheitstoken, das aus dem XML deserialisiert wurde.

Beispiele

Der folgende Code zeigt, wie Die ReadToken Methode zum Lesen eines benutzerdefinierten Tokens aus dem angegebenen XML-Reader überschreibt. Der Code stammt aus dem Custom Token Beispiel. Dieses Beispiel enthält benutzerdefinierte Klassen, die die Verarbeitung einfacher Webtoken (SIMPLE Web Tokens, SWT) ermöglichen. Informationen zu diesem Beispiel und anderen Beispielen, die für WIF verfügbar sind und wo sie heruntergeladen werden sollen, finden Sie unter WIF Code Sample Index.

/// <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;
}

Hinweise

Important

Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten ist ein Sicherheitsrisiko. Rufen Sie diese Methode nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter Überprüfen aller Eingaben.

Standardmäßig löst diese Methode eine NotImplementedException Ausnahme aus.

Überschreiben Sie diese Methode, um die Logik zum Deserialisieren eines Sicherheitstokens aus XML bereitzustellen. Wenn Sie diese Methode außer Kraft setzen, sollten Sie die SecurityTokenHandler.CanReadToken Methode auch überschreiben. Wenn die Methode in abgeleiteten Klassen das Token aus dem referenzierten XML-Code nicht deserialisieren kann, wird ein XmlException.

Gilt für:

ReadToken(XmlReader, SecurityTokenResolver)

Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, wird der XML-Code, auf den vom angegebenen XML-Reader verwiesen wird, auf ein Token des Typs festgelegt, der von der abgeleiteten Klasse mithilfe des angegebenen Tokenlösers verarbeitet wird.

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

Parameter

reader
XmlReader

Ein XML-Reader, der am Startelement des Tokens positioniert ist.

tokenResolver
SecurityTokenResolver

Ein Tokenlöser, der Out-of-Band- und zwischengespeicherte Token enthält.

Gibt zurück

Das Sicherheitstoken, das aus dem XML deserialisiert wurde.

Hinweise

Important

Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten ist ein Sicherheitsrisiko. Rufen Sie diese Methode nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter Überprüfen aller Eingaben.

Die Standardimplementierung ignoriert den tokenResolver Parameter und delegiert den Aufruf der SecurityTokenHandler.ReadToken Methode.

Überschreiben Sie diese Methode, um die Logik zum Deserialisieren eines Sicherheitstokens aus XML bereitzustellen. Wenn Sie diese Methode außer Kraft setzen, sollten Sie die SecurityTokenHandler.CanReadToken Methode auch überschreiben. Wenn die Methode in abgeleiteten Klassen das Token aus dem referenzierten XML-Code nicht deserialisieren kann, wird ein XmlException.

Gilt für: