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.
В целом маркеры безопасности делятся на три основные категории:
Маркеры, которые содержат материал криптографического ключа или ссылающиеся на нее. Например, RsaSecurityToken для этой цели часто используются типы и X509SecurityToken .
Маркеры, представляющие учетные данные для пользователей, которые уже прошли проверку подлинности. Например, UserNameSecurityToken, WindowsSecurityTokenи, если пользователь прошел проверку подлинности с помощью сертификата, X509SecurityToken типы .
Маркеры, выданные службой маркеров безопасности (STS) в ответ на запрос маркера безопасности с использованием протокола WS-Trust или WS-Federation. Обычно они возвращаются в xml-фрагменте
wst:RequestSecurityTokenResponse
. Saml2SecurityToken Типы и SamlSecurityToken чаще всего используются для представления этих маркеров.
Специальный тип маркера SessionSecurityToken, содержит сведения, необходимые для повторного создания субъекта при использовании сеансов в активных или пассивных сценариях.
Чтобы добавить функциональные возможности к существующим типам маркеров, можно наследовать от определенного типа и связанного с ним обработчика маркеров для поддержки любых новых элементов, добавляемых в маркер. Чтобы добавить поддержку новых типов маркеров, можно наследовать непосредственно от SecurityToken класса . При этом также потребуется создать класс обработчика маркеров, производный от SecurityTokenHandler класса . В зависимости от того, как будет использоваться маркер, может также потребоваться создать настраиваемый сопоставитель маркеров, производный от IssuerTokenResolver класса , а также один или несколько типов настраиваемых предложений идентификатора ключа, производных от SecurityKeyIdentifierClause класса .
Примечания для тех, кто реализует этот метод
Необходимо переопределить Idсвойства , SecurityKeys, ValidFromи 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) |