Udostępnij za pośrednictwem


SecurityTokenHandler.ReadToken Metoda

Definicja

Po zastąpieniu w klasie pochodnej deserializuje określony kod XML do tokenu typu przetworzonego przez klasę pochodną.

Przeciążenia

ReadToken(String)

Po zastąpieniu w klasie pochodnej deserializuje określony ciąg do tokenu typu przetworzonego przez klasę pochodną.

ReadToken(XmlReader)

Po zastąpieniu w klasie pochodnej deserializuje kod XML, do których odwołuje się określony czytnik XML, do tokenu typu przetworzonego przez klasę pochodną.

ReadToken(XmlReader, SecurityTokenResolver)

Po przesłonięciu w klasie pochodnej deserializuje kod XML, do których odwołuje się określony czytnik XML, do tokenu typu przetworzonego przez klasę pochodną przy użyciu określonego rozpoznawania tokenów.

ReadToken(String)

Po zastąpieniu w klasie pochodnej deserializuje określony ciąg do tokenu typu przetworzonego przez klasę pochodną.

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

Ciąg do deserializacji.

Zwraca

Token zabezpieczający, który został zdeserializowany z określonego ciągu.

Uwagi

Ważne

Wywoływanie tej metody z niezaufanymi danymi jest zagrożeniem bezpieczeństwa. Wywołaj tę metodę tylko z zaufanymi danymi. Aby uzyskać więcej informacji, zobacz Validate All Inputs (Weryfikowanie wszystkich danych wejściowych).

Domyślnie ta metoda zgłasza NotImplementedException wyjątek.

Zastąp tę metodę, aby zapewnić funkcjonalność, która może deserializować token zabezpieczający z ciągu. Jeśli zastąpisz tę metodę, należy również zastąpić metodę SecurityTokenHandler.CanReadToken .

Dotyczy

ReadToken(XmlReader)

Po zastąpieniu w klasie pochodnej deserializuje kod XML, do których odwołuje się określony czytnik XML, do tokenu typu przetworzonego przez klasę pochodną.

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

Czytnik XML umieszczony w elemecie początkowym tokenu.

Zwraca

Token zabezpieczający, który został zdeserializowany z pliku XML.

Przykłady

Poniższy kod pokazuje, jak zastąpić metodę ReadToken odczytu tokenu niestandardowego z określonego czytnika XML. Kod jest pobierany z przykładu Custom Token . Ten przykład zawiera klasy niestandardowe, które umożliwiają przetwarzanie prostych tokenów internetowych (SWT). Aby uzyskać informacje na temat tego przykładu i innych przykładów dostępnych dla programu WIF oraz miejsca ich pobierania, zobacz Przykładowy indeks kodu programu 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;
}

Uwagi

Ważne

Wywoływanie tej metody z niezaufanymi danymi jest zagrożeniem bezpieczeństwa. Wywołaj tę metodę tylko z zaufanymi danymi. Aby uzyskać więcej informacji, zobacz Validate All Inputs (Weryfikowanie wszystkich danych wejściowych).

Domyślnie ta metoda zgłasza NotImplementedException wyjątek.

Zastąp tę metodę, aby zapewnić logikę deserializacji tokenu zabezpieczającego z kodu XML. Jeśli zastąpisz tę metodę, należy również zastąpić metodę SecurityTokenHandler.CanReadToken . Zazwyczaj w klasach pochodnych, jeśli metoda nie może wykonać deserializacji tokenu z przywoływałego kodu XML, zgłasza błąd XmlException.

Dotyczy

ReadToken(XmlReader, SecurityTokenResolver)

Po przesłonięciu w klasie pochodnej deserializuje kod XML, do których odwołuje się określony czytnik XML, do tokenu typu przetworzonego przez klasę pochodną przy użyciu określonego rozpoznawania tokenów.

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

Czytnik XML umieszczony w elemecie początkowym tokenu.

tokenResolver
SecurityTokenResolver

Program rozpoznawania tokenów, który zawiera tokeny poza pasmem i buforowane.

Zwraca

Token zabezpieczający, który został zdeserializowany z pliku XML.

Uwagi

Ważne

Wywoływanie tej metody z niezaufanymi danymi jest zagrożeniem bezpieczeństwa. Wywołaj tę metodę tylko z zaufanymi danymi. Aby uzyskać więcej informacji, zobacz Validate All Inputs (Weryfikowanie wszystkich danych wejściowych).

Domyślna implementacja ignoruje tokenResolver parametr i deleguje wywołanie metody SecurityTokenHandler.ReadToken .

Zastąp tę metodę, aby zapewnić logikę deserializacji tokenu zabezpieczającego z kodu XML. Jeśli zastąpisz tę metodę, należy również zastąpić metodę SecurityTokenHandler.CanReadToken . Zazwyczaj w klasach pochodnych, jeśli metoda nie może wykonać deserializacji tokenu z przywoływałego kodu XML, zgłasza błąd XmlException.

Dotyczy