Freigeben über


SecurityTokenHandler.ReadToken Methode

Definition

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse das angegebene XML in ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird.

Überlädt

ReadToken(String)

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse die angegebene Zeichenfolge in ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird.

ReadToken(XmlReader)

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse das XML, auf das durch den angegebenen XML-Reader verwiesen wird, in ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird.

ReadToken(XmlReader, SecurityTokenResolver)

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse das XML, auf das durch den angegebenen XML-Reader verwiesen wird, in ein Token des Typs, der von dieser Klasse unter Verwendung des angegebenen Tokenresolvers verarbeitet wird.

ReadToken(String)

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse die angegebene Zeichenfolge in ein Token des Typs, der von der abgeleiteten Klasse verarbeitet wird.

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 zu deserialisierende Zeichenfolge.

Gibt zurück

Der Sicherheitstoken, der von der angegebenen Zeichenfolge deserialisiert wurde.

Hinweise

Wichtig

Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar. 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 Ausnahme aus NotImplementedException .

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

Gilt für:

ReadToken(XmlReader)

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse das XML, auf das durch den angegebenen XML-Reader verwiesen wird, in 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 Start-Element des Tokens positioniert ist.

Gibt zurück

Das Sicherheitstoken, das aus der XML deserialisiert wurde.

Beispiele

Der folgende Code zeigt, wie Sie die ReadToken -Methode überschreiben, um ein benutzerdefiniertes Token aus dem angegebenen XML-Reader zu lesen. Der Code wird aus dem Custom Token Beispiel entnommen. Dieses Beispiel stellt benutzerdefinierte Klassen bereit, die die Verarbeitung von Einfachen Webtoken (SWT) ermöglichen. Informationen zu diesem Beispiel und zu anderen für WIF verfügbaren Beispielen und zu ihren Downloadmöglichkeiten finden Sie unter WIF-Codebeispielindex.

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

Wichtig

Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar. 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 Ausnahme aus NotImplementedException .

Überschreiben Sie diese Methode, um die Logik zum Deserialisieren eines Sicherheitstokens aus XML bereitzustellen. Wenn Sie diese Methode überschreiben, sollten Sie auch die SecurityTokenHandler.CanReadToken -Methode überschreiben. Wenn die Methode in abgeleiteten Klassen das Token aus dem XML-Verweis nicht deserialisieren kann, löst sie in der Regel einen aus XmlException.

Gilt für:

ReadToken(XmlReader, SecurityTokenResolver)

Deserialisiert bei Überschreibung in einer abgeleiteten Klasse das XML, auf das durch den angegebenen XML-Reader verwiesen wird, in ein Token des Typs, der von dieser Klasse unter Verwendung des angegebenen Tokenresolvers 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 Start-Element des Tokens positioniert ist.

tokenResolver
SecurityTokenResolver

Ein Tokenresolver, der die Out-of-Band und zwischengespeicherten Token enthält.

Gibt zurück

Das Sicherheitstoken, das aus der XML deserialisiert wurde.

Hinweise

Wichtig

Das Aufrufen dieser Methode mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar. 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 an die SecurityTokenHandler.ReadToken -Methode.

Überschreiben Sie diese Methode, um die Logik zum Deserialisieren eines Sicherheitstokens aus XML bereitzustellen. Wenn Sie diese Methode überschreiben, sollten Sie auch die SecurityTokenHandler.CanReadToken -Methode überschreiben. Wenn die Methode in abgeleiteten Klassen das Token aus dem XML-Verweis nicht deserialisieren kann, löst sie in der Regel einen aus XmlException.

Gilt für: