Поделиться через


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)

Применяется к

См. также раздел