SecurityTokenHandler.ReadToken Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Cuando se reemplaza en una clase derivada, deserializa el XLM especificado a un token del tipo procesado por la clase derivada.
Sobrecargas
ReadToken(String) |
Cuando se reemplaza en una clase derivada, deserializa la cadena especificada a un token del tipo procesado por la clase derivada. |
ReadToken(XmlReader) |
Cuando se reemplaza en una clase derivada, deserializa el código XML al que hace referencia el lector XML a un token del tipo procesado por la clase derivada. |
ReadToken(XmlReader, SecurityTokenResolver) |
Cuando se reemplaza en una clase derivada, deserializa el código XML al que hace referencia el lector XML especificado en token del tipo procesado por la clase derivada mediante el solucionador de token especificado. |
ReadToken(String)
Cuando se reemplaza en una clase derivada, deserializa la cadena especificada a un token del tipo procesado por la clase 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
Cadena que se va a deserializar.
Devoluciones
El token de seguridad que se ha deserializado desde la cadena especificada.
Comentarios
Importante
Llamar a este método con datos que no son de confianza supone un riesgo de seguridad. Llame a este método solo con datos de confianza. Para obtener más información, vea Validar todas las entradas.
De forma predeterminada, este método produce una NotImplementedException excepción.
Invalide este método para proporcionar funcionalidad que pueda deserializar un token de seguridad de una cadena. Si invalida, este método también debe invalidar el SecurityTokenHandler.CanReadToken método .
Se aplica a
ReadToken(XmlReader)
Cuando se reemplaza en una clase derivada, deserializa el código XML al que hace referencia el lector XML a un token del tipo procesado por la clase 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
Lector XML situado en el elemento de inicio del token.
Devoluciones
El token de seguridad que se ha deserializado desde XML.
Ejemplos
En el código siguiente se muestra cómo invalidar el ReadToken método para leer un token personalizado del lector XML especificado. El código se toma del Custom Token
ejemplo. En este ejemplo se proporcionan clases personalizadas que permiten el procesamiento de tokens web simples (SWT). Para obtener información sobre este ejemplo y otros ejemplos disponibles para WIF y dónde descargarlos, consulte Índice de ejemplo 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;
}
Comentarios
Importante
Llamar a este método con datos que no son de confianza supone un riesgo de seguridad. Llame a este método solo con datos de confianza. Para obtener más información, vea Validar todas las entradas.
De forma predeterminada, este método produce una NotImplementedException excepción.
Invalide este método para proporcionar la lógica para deserializar un token de seguridad de XML. Si invalida este método, también debe invalidar el SecurityTokenHandler.CanReadToken método . Normalmente, en clases derivadas, si el método no puede deserializar el token del XML al que se hace referencia, produce un XmlException.
Se aplica a
ReadToken(XmlReader, SecurityTokenResolver)
Cuando se reemplaza en una clase derivada, deserializa el código XML al que hace referencia el lector XML especificado en token del tipo procesado por la clase derivada mediante el solucionador 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
Lector XML situado en el elemento de inicio del token.
- tokenResolver
- SecurityTokenResolver
Una resolución de tokens que contiene los tokens fuera de banda y almacenados en memoria caché.
Devoluciones
El token de seguridad que se ha deserializado desde XML.
Comentarios
Importante
Llamar a este método con datos que no son de confianza supone un riesgo de seguridad. Llame a este método solo con datos de confianza. Para obtener más información, vea Validar todas las entradas.
La implementación predeterminada omite el tokenResolver
parámetro y delega la llamada al SecurityTokenHandler.ReadToken método .
Invalide este método para proporcionar la lógica para deserializar un token de seguridad de XML. Si invalida este método, también debe invalidar el SecurityTokenHandler.CanReadToken método . Normalmente, en clases derivadas, si el método no puede deserializar el token del XML al que se hace referencia, produce un XmlException.