SecurityToken 类

定义

表示用于实现所有安全令牌的基类。

public ref class SecurityToken abstract
public abstract class SecurityToken
type SecurityToken = class
Public MustInherit Class SecurityToken
继承
SecurityToken
派生

示例

主题中使用的 SecurityToken 代码示例取自示例 Custom Token 。 此示例提供自定义类,这些类支持 (SWT) 处理简单 Web 令牌。 它包括类和 SimpleWebTokenHandler 类的实现SimpleWebToken,以及其他支持 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 附带对以下安全令牌类型的支持:

另外两个安全令牌类 GenericXmlSecurityTokenEncryptedSecurityToken可用于帮助处理一般情况。

从广义上讲,安全令牌分为三大类:

在主动或被动方案中使用会话时, SessionSecurityToken特殊令牌类型 包含重新创建主体所需的信息。

若要向现有令牌类型添加功能,可以从特定类型及其关联的标记处理程序派生,以支持添加到令牌的任何新元素。 若要添加对新令牌类型的支持,可以直接从 SecurityToken 类派生。 执行此操作时,还需要通过从 SecurityTokenHandler 类派生来创建令牌处理程序类。 根据令牌的使用方式,可能还需要通过从 IssuerTokenResolver 类派生来创建自定义令牌解析程序,并通过从 SecurityKeyIdentifierClause 类派生一个或多个自定义密钥标识符子句类型。

实施者说明

必须重写 IdSecurityKeysValidFromValidTo 属性。 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)

适用于

另请参阅