SecurityTokenHandler.ReadToken Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Quando sobrescrito numa classe derivada, desserializa o XML especificado para um token do tipo processado pela classe derivada.
Sobrecargas
| Name | Description |
|---|---|
| ReadToken(String) |
Quando sobreposta numa classe derivada, a cadeia especificada desserializa para um token do tipo processado pela classe derivada. |
| ReadToken(XmlReader) |
Quando sobreposto numa classe derivada, desserializa o XML referenciado pelo leitor XML especificado para um token do tipo processado pela classe derivada. |
| ReadToken(XmlReader, SecurityTokenResolver) |
Quando sobreposto numa classe derivada, desserializa o XML referenciado pelo leitor XML especificado para um token do tipo processado pela classe derivada usando o resolvedor de token especificado. |
ReadToken(String)
Quando sobreposta numa classe derivada, a cadeia especificada desserializa para um token do tipo processado pela classe derivada.
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
Parâmetros
- tokenString
- String
A cadeia a desserializar.
Devoluções
O token de segurança que foi desserializado a partir da cadeia especificada.
Observações
Important
Chamar este método com dados não confiáveis é um risco de segurança. Chame este método apenas com dados confiáveis. Para obter mais informações, consulte Validar todas as informações inseridas.
Por defeito, este método lança uma NotImplementedException exceção.
Substitua este método para fornecer funcionalidades que possam desserializar um token de segurança a partir de uma cadeia. Se anulares este método, também deves sobrepor o SecurityTokenHandler.CanReadToken método.
Aplica-se a
ReadToken(XmlReader)
Quando sobreposto numa classe derivada, desserializa o XML referenciado pelo leitor XML especificado para um token do tipo processado pela classe derivada.
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
Parâmetros
- reader
- XmlReader
Um leitor XML posicionado no elemento inicial do token.
Devoluções
O token de segurança que foi desserializado do XML.
Exemplos
O código seguinte mostra como sobrescrever o ReadToken método para ler um token personalizado a partir do leitor XML especificado. O código é retirado do Custom Token exemplo. Este exemplo fornece classes personalizadas que permitem o processamento de Simples Web Tokens (SWT). Para informações sobre esta amostra e outras amostras disponíveis para WIF e onde as descarregar, consulte Índice de Exemplos de Código 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;
}
Observações
Important
Chamar este método com dados não confiáveis é um risco de segurança. Chame este método apenas com dados confiáveis. Para obter mais informações, consulte Validar todas as informações inseridas.
Por defeito, este método lança uma NotImplementedException exceção.
Substitua este método para fornecer a lógica para desserializar um token de segurança a partir do XML. Se anulares este método, também deves sobrepor o SecurityTokenHandler.CanReadToken método. Normalmente, em classes derivadas, se o método não conseguir desserializar o token do XML referenciado, ele lança um XmlException.
Aplica-se a
ReadToken(XmlReader, SecurityTokenResolver)
Quando sobreposto numa classe derivada, desserializa o XML referenciado pelo leitor XML especificado para um token do tipo processado pela classe derivada usando o resolvedor de token especificado.
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
Parâmetros
- reader
- XmlReader
Um leitor XML posicionado no elemento inicial do token.
- tokenResolver
- SecurityTokenResolver
Um resolvedor de token que contém tokens fora de banda e armazenados em cache.
Devoluções
O token de segurança que foi desserializado do XML.
Observações
Important
Chamar este método com dados não confiáveis é um risco de segurança. Chame este método apenas com dados confiáveis. Para obter mais informações, consulte Validar todas as informações inseridas.
A implementação padrão ignora o tokenResolver parâmetro e delega a chamada ao SecurityTokenHandler.ReadToken método.
Substitua este método para fornecer a lógica para desserializar um token de segurança a partir do XML. Se anulares este método, também deves sobrepor o SecurityTokenHandler.CanReadToken método. Normalmente, em classes derivadas, se o método não conseguir desserializar o token do XML referenciado, ele lança um XmlException.