SecurityTokenHandler.ReadToken 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在衍生類別中覆寫時,將指定 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。