SecurityToken Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет базовый класс, используемый для реализации всех маркеров безопасности.
public ref class SecurityToken abstract
public abstract class SecurityToken
type SecurityToken = class
Public MustInherit Class SecurityToken
- Наследование
-
SecurityToken
- Производный
Примеры
Примеры кода, используемые в SecurityToken разделах, взяты из Custom Token примера. В этом примере представлены пользовательские классы, которые позволяют обрабатывать простые веб-токены (SWT). Он включает реализацию SimpleWebToken класса и SimpleWebTokenHandler класса, а также другие классы, поддерживающие маркеры SWT. Сведения об этом примере и других примерах, доступных для WIF и о том, где их скачать, см. в разделе "Пример кода WIF". В следующем коде показана реализация SimpleWebToken класса. Этот класс расширяется SecurityToken.
/// <summary>
/// Defines the set of constants for the Simple Web Token.
/// </summary>
public static class SimpleWebTokenConstants
{
public const string Audience = "Audience";
public const string ExpiresOn = "ExpiresOn";
public const string Id = "Id";
public const string Issuer = "Issuer";
public const string Signature = "HMACSHA256";
public const string ValidFrom = "ValidFrom";
public const string ValueTypeUri = "http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0";
}
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.IdentityModel.Tokens;
namespace SimpleWebToken
{
/// <summary>
/// This class represents the token format for the SimpleWebToken.
/// </summary>
public class SimpleWebToken : SecurityToken
{
public static DateTime SwtBaseTime = new DateTime( 1970, 1, 1, 0, 0, 0, 0 ); // per SWT psec
NameValueCollection _properties;
string _serializedToken;
/// <summary>
/// Initializes a new instance of the <see cref="SimpleWebToken"/> class.
/// This is an internal constructor that is only called from the <see cref="SimpleWebTokenHandler"/> when reading a token received from the wire.
/// </summary>
/// <param name="properties">The collection representing all the key value pairs in the token.</param>
/// <param name="serializedToken">The serialized form of the token.</param>
internal SimpleWebToken( NameValueCollection properties, string serializedToken )
: this(properties)
{
_serializedToken = serializedToken;
}
/// <summary>
/// Initializes a new instance of the <see cref="SimpleWebToken"/> class.
/// </summary>
/// <param name="properties">The collection representing all the key value pairs in the token.</param>
public SimpleWebToken( NameValueCollection properties )
{
if ( properties == null )
{
throw new ArgumentNullException( "properties" );
}
_properties = properties;
}
/// <summary>
/// Gets the Id of the token.
/// </summary>
/// <value>The Id of the token.</value>
public override string Id
{
get
{
return _properties[SimpleWebTokenConstants.Id];
}
}
/// <summary>
/// Gets the keys associated with this token.
/// </summary>
/// <value>The keys associated with this token.</value>
public override ReadOnlyCollection<SecurityKey> SecurityKeys
{
get
{
return new ReadOnlyCollection<SecurityKey>( new List<SecurityKey>() );
}
}
/// <summary>
/// Gets the time from when the token is valid.
/// </summary>
/// <value>The time from when the token is valid.</value>
public override DateTime ValidFrom
{
get
{
string validFrom = _properties[SimpleWebTokenConstants.ValidFrom];
return GetTimeAsDateTime( String.IsNullOrEmpty( validFrom ) ? "0" : validFrom );
}
}
/// <summary>
/// Gets the time when the token expires.
/// </summary>
/// <value>The time up to which the token is valid.</value>
public override DateTime ValidTo
{
get
{
string expiryTime = _properties[SimpleWebTokenConstants.ExpiresOn];
return GetTimeAsDateTime( String.IsNullOrEmpty( expiryTime ) ? "0" : expiryTime );
}
}
/// <summary>
/// Gets the Audience for the token.
/// </summary>
/// <value>The audience of the token.</value>
public string Audience
{
get
{
return _properties[SimpleWebTokenConstants.Audience];
}
}
/// <summary>
/// Gets the Issuer for the token.
/// </summary>
/// <value>The issuer for the token.</value>
public string Issuer
{
get
{
return _properties[SimpleWebTokenConstants.Issuer];
}
}
/// <summary>
/// Gets the signature for the token.
/// </summary>
/// <value>The signature for the token.</value>
public string Signature
{
get
{
return _properties[SimpleWebTokenConstants.Signature];
}
}
/// <summary>
/// Gets the serialized form of the token if the token was created from its serialized form by the token handler.
/// </summary>
/// <value>The serialized form of the token.</value>
public string SerializedToken
{
get
{
return _serializedToken;
}
}
/// <summary>
/// Creates a copy of all key value pairs of the token.
/// </summary>
/// <returns>A copy of all the key value pairs in the token.</returns>
public NameValueCollection GetAllProperties()
{
return new NameValueCollection( _properties );
}
/// <summary>
/// Converts the time in seconds to a <see cref="DateTime"/> object based on the base time
/// defined by the Simple Web Token.
/// </summary>
/// <param name="expiryTime">The time in seconds.</param>
/// <returns>The time as a <see cref="DateTime"/> object.</returns>
protected virtual DateTime GetTimeAsDateTime( string expiryTime )
{
long totalSeconds = 0;
if ( !long.TryParse( expiryTime, out totalSeconds ) )
{
throw new SecurityTokenException("Invalid expiry time. Expected the time to be in seconds passed from 1 January 1970.");
}
long maxSeconds = (long)( DateTime.MaxValue - SwtBaseTime ).TotalSeconds - 1;
if ( totalSeconds > maxSeconds )
{
totalSeconds = maxSeconds;
}
return SwtBaseTime.AddSeconds( totalSeconds );
}
}
}
Комментарии
Используйте маркер безопасности для предоставления учетных данных проверки подлинности или защиты сообщения.
Маркер безопасности можно использовать для предоставления учетных данных проверки подлинности, материала криптографического ключа или, в случае маркера безопасности, выданного службой маркеров безопасности (STS), коллекцию утверждений о субъекте. Все маркеры безопасности являются производными от SecurityToken класса.
Начиная с .NET 4.5, Windows Identity Foundation (WIF) полностью интегрирован в платформу .NET Framework, а классы, предоставляемые WIF, являются предпочтительным способом обработки маркеров безопасности в коде. В WIF маркеры безопасности сериализуются и десериализируются в xml-представление и проверяются с помощью классов, производных от SecurityTokenHandler базового класса. Проверка маркера включает не только обеспечение допустимости маркера, но и возвращение ClaimsIdentity экземпляра из маркера, который можно использовать при принятии решений проверки подлинности и авторизации. Он ClaimsIdentity создается реализацией метода обработчика маркеров ValidateToken из утверждений, содержащихся в маркере, а также из утверждений, которые являются встроенными для самого типа токена.
WIF поставляется с поддержкой следующих типов маркеров безопасности:
Saml2SecurityToken: представляет маркер безопасности, основанный на утверждении SAML 2.0. Этот тип маркера обычно выдается службой маркеров безопасности в ответ на запрос маркера безопасности WS-Trust или WS-Federation маркер безопасности (RST).
SamlSecurityToken: представляет маркер безопасности, основанный на утверждении SAML 1.1. Этот тип маркера обычно выдается службой маркеров безопасности в ответ на запрос маркера безопасности WS-Trust или WS-Federation маркер безопасности (RST).
KerberosRequestorSecurityToken и KerberosReceiverSecurityToken: представляет маркер безопасности, основанный на запросе Kerberos, полученном или отправленном в сообщении SOAP.
RsaSecurityToken: представляет маркер безопасности, основанный на ключе, созданном с помощью алгоритма RSA.
SessionSecurityToken: представляет маркер безопасности, содержащий сведения о сеансе.
UserNameSecurityToken: представляет маркер безопасности, основанный на имени пользователя и пароля.
WindowsSecurityToken: представляет маркер безопасности, основанный на идентификаторе домена или учетной записи пользователя Windows.
X509SecurityToken: представляет маркер безопасности, основанный на сертификате X.509.
X509WindowsSecurityToken: представляет маркер безопасности, основанный на сертификате X.509, сопоставленном с Windows пользователем домена или учетной записью локального компьютера.
Два других класса GenericXmlSecurityToken маркеров безопасности и EncryptedSecurityTokenмогут использоваться для обработки общих случаев.
Широко говоря, маркеры безопасности делятся на три основные категории:
Маркеры, которые несут или ссылают материалы криптографического ключа. Например, RsaSecurityTokenX509SecurityToken типы часто используются для этой цели.
Маркеры, представляющие учетные данные для пользователей, которые уже прошли проверку подлинности. Например, тип UserNameSecurityTokenWindowsSecurityTokenи, в случае с пользователем, прошедшим проверку подлинности с помощью сертификата.X509SecurityToken
Маркеры, выданные службой маркеров безопасности (STS) в ответ на запрос маркера безопасности с помощью протокола WS-Trust или WS-Federation. Обычно они возвращаются в
wst:RequestSecurityTokenResponseфрагменте XML. Saml2SecurityToken Чаще SamlSecurityToken всего используются типы для представления этих маркеров.
Специальный тип маркера содержит сведения, SessionSecurityTokenнеобходимые для повторного создания субъекта при использовании сеансов в активных или пассивных сценариях.
Чтобы добавить функциональные возможности в существующие типы маркеров, можно наследовать от конкретного типа и связанного обработчика маркеров для поддержки всех новых элементов, добавленных в маркер. Чтобы добавить поддержку новых типов маркеров, можно получить непосредственно от SecurityToken класса. При этом также необходимо создать класс обработчика маркеров, производный от SecurityTokenHandler класса. В зависимости от способа использования маркера также может потребоваться создать пользовательский сопоставитель маркеров, производный от IssuerTokenResolver класса, а также один или несколько типов предложений пользовательского идентификатора ключа, производных от SecurityKeyIdentifierClause класса.
Примечания для тех, кто реализует этот метод
Необходимо переопределить Idсвойства , SecurityKeysValidFromи ValidTo свойства. Методы CanCreateKeyIdentifierClause<T>(), CreateKeyIdentifierClause<T>()MatchesKeyIdentifierClause(SecurityKeyIdentifierClause)и ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) методы поддерживают идентификаторы ключей типаLocalIdKeyIdentifierClause. Эти методы необходимо переопределить для поддержки других типов идентификаторов ключей в производном классе.
Конструкторы
| Имя | Описание |
|---|---|
| SecurityToken() |
Вызывается конструкторами в производных классах для инициализации класса SecurityToken. |
Свойства
| Имя | Описание |
|---|---|
| Id |
Возвращает уникальный идентификатор маркера безопасности. |
| SecurityKeys |
Возвращает криптографические ключи, связанные с маркером безопасности. |
| ValidFrom |
Получает первый момент времени, в течение которого этот маркер безопасности действителен. |
| ValidTo |
Возвращает последний момент времени, в течение которого этот маркер безопасности действителен. |
Методы
| Имя | Описание |
|---|---|
| CanCreateKeyIdentifierClause<T>() |
Возвращает значение, указывающее, может ли этот маркер безопасности создавать указанный идентификатор ключа. |
| CreateKeyIdentifierClause<T>() |
Создает указанное предложение идентификатора ключа. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MatchesKeyIdentifierClause(SecurityKeyIdentifierClause) |
Возвращает значение, указывающее, можно ли разрешить идентификатор ключа для этого экземпляра в указанный идентификатор ключа. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) |
Возвращает ключ для указанного предложения идентификатора ключа. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |