SecurityToken Класс

Определение

Представляет базовый класс, используемый для реализации всех маркеров безопасности.Represents a base class used to implement all security tokens.

public ref class SecurityToken abstract
public abstract class SecurityToken
type SecurityToken = class
Public MustInherit Class SecurityToken
Наследование
SecurityToken
Производный

Примеры

Примеры кода, используемые в SecurityToken разделах, взяты из примера Custom Token.The code examples that are used in the SecurityToken topics are taken from the Custom Token sample. Этот пример предоставляет пользовательские классы, которые позволяют обрабатывать простые веб-маркеры (SWT).This sample provides custom classes that enable processing of Simple Web Tokens (SWT). Он включает реализацию класса SimpleWebToken и класса SimpleWebTokenHandler, а также другие классы, поддерживающие маркеры SWT.It includes an implementation of a SimpleWebToken class and a SimpleWebTokenHandler class, as well as other classes that support SWT tokens. Сведения об этом образце и других примерах, доступных для WIF, и о месте их загрузки см. в разделе индекс примера кода WIF.For information about this sample and other samples available for WIF and about where to download them, see WIF Code Sample Index. В следующем коде показана реализация класса SimpleWebToken.The following code shows the implementation of the SimpleWebToken class. Этот класс расширяет SecurityToken.This class extends 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 );
        } 
    }    
}

Комментарии

Используйте маркер безопасности, чтобы обеспечить учетные данные для проверки подлинности или защитить сообщение.Use a security token to provide authentication credentials or to protect a message.

Маркер безопасности можно использовать для предоставления учетных данных проверки подлинности, материала криптографического ключа или, в случае маркера безопасности, выданного службой маркеров безопасности (STS), коллекции заявок о субъекте.A security token can be used to provide authentication credentials, cryptographic key material, or, in the case of a security token issued by a security token service (STS), a collection of claims about a subject. Все маркеры безопасности являются производными от класса SecurityToken.All security tokens derive from the SecurityToken class.

Начиная с .NET 4,5, Windows Identity Foundation (WIF) полностью интегрирована в .NET Framework и классы, предоставляемые WIF, являются предпочтительным способом обработки маркеров безопасности в коде.Beginning with .NET 4.5, Windows Identity Foundation (WIF) has been fully integrated into the .NET Framework and the classes exposed by WIF are the preferred method of handling security tokens in your code. В WIF маркеры безопасности сериализуются и десериализуются в их XML-представление и проверяются с помощью классов, производных от базового класса SecurityTokenHandler.In WIF, security tokens are serialized and deserialized to and from their XML representation and are validated by using classes derived from the SecurityTokenHandler base class. Проверка маркера не только гарантирует допустимость маркера, но также возвращает экземпляр ClaimsIdentity из токена, который можно использовать для проверки подлинности и авторизации.Validating a token involves not just ensuring that the token is valid, but also returning a ClaimsIdentity instance from the token that can be used in making authentication and authorization decisions. ClaimsIdentity создается реализацией ValidateToken метода обработчика маркера из утверждений, содержащихся в маркере, а также из утверждений, которые являются встроенными для самого типа токена.The ClaimsIdentity is constructed by the token handler's implementation of the ValidateToken method from the claims contained in the token as well as from claims that are intrinsic to the token type itself.

WIF поставляется с поддержкой следующих типов маркеров безопасности:WIF ships with support for the following types of security tokens:

  • Saml2SecurityToken: представляет маркер безопасности, основанный на утверждении SAML 2,0.Saml2SecurityToken: Represents a security token that is based upon a SAML 2.0 Assertion. Этот тип токена обычно выдается службой маркеров безопасности в ответ на запрос маркера безопасности WS-Trust или WS-Federation (RST).This token type is typically issued by a security token service in response to a WS-Trust or WS-Federation security token request (RST).

  • SamlSecurityToken: представляет маркер безопасности, основанный на утверждении SAML 1,1.SamlSecurityToken: Represents a security token that is based upon a SAML 1.1 Assertion. Этот тип токена обычно выдается службой маркеров безопасности в ответ на запрос маркера безопасности WS-Trust или WS-Federation (RST).This token type is typically issued by a security token service in response to a WS-Trust or WS-Federation security token request (RST).

  • KerberosRequestorSecurityToken и KerberosReceiverSecurityToken— это маркер безопасности, основанный на билете Kerberos, полученном или отправленном в сообщении SOAP.KerberosRequestorSecurityToken and KerberosReceiverSecurityToken: Represents a security token that is based upon a Kerberos ticket that is received or sent in a SOAP message

  • RsaSecurityToken: представляет маркер безопасности, основанный на ключе, созданном с помощью алгоритма RSA.RsaSecurityToken: Represents a security token that is based upon key that is created using the RSA algorithm.

  • SessionSecurityToken: представляет маркер безопасности, содержащий сведения о сеансе.SessionSecurityToken: Represents a security token that contains information about a session.

  • UserNameSecurityToken: представляет маркер безопасности, основанный на имени пользователя и пароле.UserNameSecurityToken: Represents a security token that is based on a username and password.

  • WindowsSecurityToken: представляет маркер безопасности, основанный на удостоверении домена или учетной записи пользователя Windows.WindowsSecurityToken: Represents a security token that is based on the identity of a Windows domain or user account.

  • X509SecurityToken: представляет маркер безопасности, основанный на сертификате X. 509.X509SecurityToken: Represents a security token that is based on an X.509 certificate.

  • X509WindowsSecurityToken. представляет маркер безопасности, основанный на сертификате X. 509, сопоставленном с учетной записью пользователя домена Windows или локального компьютера.X509WindowsSecurityToken: Represents a security token that is based upon an X.509 certificate that is mapped to a Windows domain user or local computer user account.

Для управления общими сценариями можно использовать два других класса маркеров безопасности: GenericXmlSecurityToken и EncryptedSecurityToken.Two other security token classes, GenericXmlSecurityToken and EncryptedSecurityToken, can be used to help handle general cases.

Широко говоря, маркеры безопасности делятся на три основные категории:Broadly speaking security tokens fall into three major categories:

  • Токены, которые содержат или ссылаются на материал криптографического ключа.Tokens that carry or reference cryptographic key material. Например, для этой цели часто используются типы RsaSecurityToken и X509SecurityToken.For example the RsaSecurityToken and X509SecurityToken types are often used for this purpose.

  • Токены, представляющие учетные данные для пользователей, которые уже прошли проверку подлинности.Tokens that represent credentials for users that have already been authenticated. Например, UserNameSecurityToken, WindowsSecurityTokenи, если пользователь прошел проверку подлинности с помощью сертификата, X509SecurityToken типы.For example, the UserNameSecurityToken, WindowsSecurityToken, and, in the case of a user authenticated using a certificate, the X509SecurityToken types.

  • Токены, выданные службой маркеров безопасности (STS) в ответ на запрос маркера безопасности с помощью протокола WS-Trust или WS-Federation.Tokens that are issued by a security token service (STS) in response to a security token request using either the WS-Trust or WS-Federation protocol. Обычно они возвращаются в wst:RequestSecurityTokenResponse фрагменте XML.These are typically returned in a wst:RequestSecurityTokenResponse XML fragment. Типы Saml2SecurityToken и SamlSecurityToken чаще всего используются для представления этих маркеров.The Saml2SecurityToken and SamlSecurityToken types are most often used to represent these tokens.

Особый тип маркера, SessionSecurityToken, содержит сведения, необходимые для повторного создания субъекта при использовании сеансов в активных или пассивных сценариях.A special token type, the SessionSecurityToken, contains information necessary to recreate a principal when using sessions in active or passive scenarios.

Чтобы добавить функциональные возможности в существующие типы токенов, можно наследовать от конкретного типа и связанного с ним обработчика маркера для поддержки всех новых элементов, добавляемых в маркер.To add functionality to existing token types you can derive from the specific type and its associated token handler to support any new elements that you add to the token. Чтобы добавить поддержку новых типов токенов, можно наследовать непосредственно от класса SecurityToken.To add support for new token types, you can derive directly from the SecurityToken class. При этом необходимо также создать класс обработчика маркеров, производный от класса SecurityTokenHandler.When you do this, you will also need to create a token handler class by deriving from the SecurityTokenHandler class. В зависимости от того, как будет использоваться токен, может также потребоваться создать пользовательский сопоставитель маркеров, производный от класса IssuerTokenResolver, а также одного или нескольких типов предложений пользовательских идентификаторов, производных от класса SecurityKeyIdentifierClause.Depending on how your token is to be used, you may also need to create a custom token resolver by deriving from the IssuerTokenResolver class as well as one or more custom key identifier clause types by deriving from the SecurityKeyIdentifierClause class.

Примечания для тех, кто реализует этот метод

Необходимо переопределить свойства Id, SecurityKeys, ValidFromи ValidTo.You must override the Id, SecurityKeys, ValidFrom, and ValidTo properties. Методы CanCreateKeyIdentifierClause<T>(), CreateKeyIdentifierClause<T>(), MatchesKeyIdentifierClause(SecurityKeyIdentifierClause)и ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) поддерживают идентификаторы ключей типа LocalIdKeyIdentifierClause.The CanCreateKeyIdentifierClause<T>(), CreateKeyIdentifierClause<T>(), MatchesKeyIdentifierClause(SecurityKeyIdentifierClause), and ResolveKeyIdentifierClause(SecurityKeyIdentifierClause) methods all support key identifiers of type LocalIdKeyIdentifierClause. Эти методы необходимо переопределить для поддержки других типов идентификаторов ключей в производном классе.You must override these methods to support other key identifier types in your derived class.

Конструкторы

SecurityToken()

Вызывается конструкторами в производных классах для инициализации класса SecurityToken.Called by constructors in derived classes to initialize the SecurityToken class.

Свойства

Id

Возвращает уникальный идентификатор маркера безопасности.Gets a unique identifier of the security token.

SecurityKeys

Возвращает ключи шифрования, связанные с маркером безопасности.Gets the cryptographic keys associated with the security token.

ValidFrom

Возвращает первый момент времени, когда данный маркер безопасности является действительным.Gets the first instant in time at which this security token is valid.

ValidTo

Возвращает последний момент времени, когда данный маркер безопасности является действительным.Gets the last instant in time at which this security token is valid.

Методы

CanCreateKeyIdentifierClause<T>()

Возвращает значение, определяющее, может ли маркер безопасности создать указанный идентификатор ключа.Gets a value that indicates whether this security token is capable of creating the specified key identifier.

CreateKeyIdentifierClause<T>()

Создает предложение заданного идентификатора ключа.Creates the specified key identifier clause.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MatchesKeyIdentifierClause(SecurityKeyIdentifierClause)

Возвращает значение, указывающее, можно ли идентификатор ключа данного экземпляра разрешить в определенный идентификатор ключа.Returns a value that indicates whether the key identifier for this instance can be resolved to the specified key identifier.

MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ResolveKeyIdentifierClause(SecurityKeyIdentifierClause)

Возвращает ключ для указанного предложения идентификатора ключа.Gets the key for the specified key identifier clause.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

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

Дополнительно