共用方式為


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 範例。 此範例提供自定義類別,可讓您處理簡單 Web 令牌 (SWT) 。 如需此範例和其他可供 WIF 下載範例的資訊,請參閱 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;
}

備註

重要

使用不信任的資料呼叫此方法,會造成安全性上的風險。 呼叫此方法時,請一律使用信任的資料。 如需詳細資訊,請參閱 驗證所有輸入

根據預設,這個方法會擲回例外狀況 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

包含 Out-of-Band 及快取權杖的權杖解析程式。

傳回

已從 XML 還原序列化的安全性權杖。

備註

重要

使用不信任的資料呼叫此方法,會造成安全性上的風險。 呼叫此方法時,請一律使用信任的資料。 如需詳細資訊,請參閱 驗證所有輸入

默認實作會忽略 參數, tokenResolver 並委派對 方法的 SecurityTokenHandler.ReadToken 呼叫。

覆寫這個方法,以提供從 XML 還原串行化安全性令牌的邏輯。 如果您覆寫這個方法,則也應該覆寫 SecurityTokenHandler.CanReadToken 方法。 一般而言,在衍生類別中,如果 方法無法從參考的 XML 還原串行化令牌,則會擲回 XmlException

適用於