SecurityTokenHandler.ReadToken Метод

Определение

При переопределении в производном классе десериализует заданный XML-код в токен обрабатываемого этим производным классом типа.

Перегрузки

ReadToken(String)

При переопределении в производном классе десериализует заданную строку в токен обрабатываемого этим производным классом типа.

ReadToken(XmlReader)

При переопределении в производном классе десериализует десериализует XML-код, на который имеется ссылка в указанном модуле чтения XML, в токен обрабатываемого этим производным классом типа.

ReadToken(XmlReader, SecurityTokenResolver)

При переопределении в производном классе десериализует XML-код, на который имеется ссылка в указанном модуле чтения XML, в токен, обрабатываемый производным классом, путем использования заданного сопоставителя токенов.

ReadToken(String)

При переопределении в производном классе десериализует заданную строку в токен обрабатываемого этим производным классом типа.

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

Параметры

tokenString
String

Строка, подлежащая десериализации.

Возвращаемое значение

Токен безопасности, который был десериализован из указанной строки.

Комментарии

Важно!

Вызов этого метода для ненадежных данных представляет угрозу безопасности. Вызывайте этот метод только для надежных данных. Дополнительные сведения см. в разделе Проверка всех входных данных.

По умолчанию этот метод создает NotImplementedException исключение.

Переопределите этот метод, чтобы предоставить функциональные возможности, которые могут десериализовать маркер безопасности из строки. При переопределении этого метода необходимо также переопределить SecurityTokenHandler.CanReadToken метод .

Применяется к

ReadToken(XmlReader)

При переопределении в производном классе десериализует десериализует XML-код, на который имеется ссылка в указанном модуле чтения XML, в токен обрабатываемого этим производным классом типа.

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

Параметры

reader
XmlReader

Средство чтения XML, размещаемое на начальном элементе токена.

Возвращаемое значение

Токен безопасности, который был десериализован из XML.

Примеры

В следующем коде показано, как переопределить ReadToken метод для чтения пользовательского маркера из указанного средства чтения XML. Код взят из Custom Token примера. В этом примере представлены пользовательские классы, обеспечивающие обработку простых веб-маркеров (SWT). Сведения об этом и других примерах, доступных для WIF, и о том, где их можно скачать, см. в разделе 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;
}

Комментарии

Важно!

Вызов этого метода для ненадежных данных представляет угрозу безопасности. Вызывайте этот метод только для надежных данных. Дополнительные сведения см. в разделе Проверка всех входных данных.

По умолчанию этот метод создает NotImplementedException исключение.

Переопределите этот метод, чтобы предоставить логику для десериализации маркера безопасности из XML. При переопределении этого метода необходимо также переопределить SecurityTokenHandler.CanReadToken метод . Как правило, в производных классах, если метод не может десериализовать маркер из упоминаемого XML-кода, он создает исключение XmlException.

Применяется к

ReadToken(XmlReader, SecurityTokenResolver)

При переопределении в производном классе десериализует XML-код, на который имеется ссылка в указанном модуле чтения XML, в токен, обрабатываемый производным классом, путем использования заданного сопоставителя токенов.

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

Параметры

reader
XmlReader

Средство чтения XML, размещаемое на начальном элементе токена.

tokenResolver
SecurityTokenResolver

сопоставитель токена, содержащий внештатные и кэшированных токены.

Возвращаемое значение

Токен безопасности, который был десериализован из XML.

Комментарии

Важно!

Вызов этого метода для ненадежных данных представляет угрозу безопасности. Вызывайте этот метод только для надежных данных. Дополнительные сведения см. в разделе Проверка всех входных данных.

Реализация по умолчанию игнорирует tokenResolver параметр и делегирует вызов SecurityTokenHandler.ReadToken метода .

Переопределите этот метод, чтобы предоставить логику для десериализации маркера безопасности из XML. При переопределении этого метода необходимо также переопределить SecurityTokenHandler.CanReadToken метод . Как правило, в производных классах, если метод не может десериализовать маркер из упоминаемого XML-кода, он создает исключение XmlException.

Применяется к