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 。 このサンプルでは、Simple Web Tokens (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

帯域外およびキャッシュ済みトークンを含むトークン リゾルバー。

戻り値

XML から逆シリアル化されたセキュリティ トークン。

注釈

重要

信頼されていないデータを指定してこのメソッドを呼び出すことは、セキュリティ上のリスクが伴います。 このメソッドは信頼されたデータでのみ呼び出してください。 詳細については、「 すべての入力を検証する」を参照してください。

既定の実装では、 パラメーターが tokenResolver 無視され、 メソッドの呼び出しが SecurityTokenHandler.ReadToken 委任されます。

セキュリティ トークンを XML から逆シリアル化するロジックを提供するには、このメソッドをオーバーライドします。 このメソッドをオーバーライドする場合は、 メソッドもオーバーライドする SecurityTokenHandler.CanReadToken 必要があります。 通常、派生クラスでは、 メソッドが参照先 XML からトークンを逆シリアル化できない場合は、 が XmlExceptionスローされます。

適用対象