SessionSecurityTokenHandler 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
SecurityTokenHandler类型的 SessionSecurityToken 进程安全标志。
public ref class SessionSecurityTokenHandler : System::IdentityModel::Tokens::SecurityTokenHandler
public class SessionSecurityTokenHandler : System.IdentityModel.Tokens.SecurityTokenHandler
type SessionSecurityTokenHandler = class
inherit SecurityTokenHandler
Public Class SessionSecurityTokenHandler
Inherits SecurityTokenHandler
- 继承
- 派生
示例
以下 XML 演示如何将令牌处理程序集合中的默认会话安全令牌处理程序替换为配置中的 类的 MachineKeySessionSecurityTokenHandler 实例。
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
注解
类 SessionSecurityTokenHandler 序列化、反序列化和验证会话令牌。 会话令牌是 类型的 SessionSecurityToken令牌。 类 SessionSecurityTokenHandler 将令牌序列化为 Cookie 格式和从 Cookie 格式序列化令牌。 默认情况下,类将令牌序列化为 WS-Secure Conversation Feb2005 或 WS-Secure Conversation 1.3 <wsc:SecurityContextToken>
元素。 (WSFAM) 和 SessionAuthenticationModule (SAM) 使用WSFederationAuthenticationModule会话令牌来存储有关会话的信息,这主要是ClaimsPrincipal与经过身份验证的用户以及会话开始和过期时间关联的。
在被动方案中, WSFederationAuthenticationModule 调用 SessionAuthenticationModule (SAM) 身份验证管道,以从 ClaimsPrincipal 表示经过身份验证的用户的 创建会话令牌。 SAM 使用其配置 SessionSecurityTokenHandler 来创建令牌并将其序列化为 cookie (,并在后续请求) 对 cookie 中的令牌进行反序列化。 SAM 使用其配置 CookieHandler 类的实例将 Cookie 写回到 HTTP 响应。 然后,此 Cookie 将返回到客户端,在后续请求中,客户端可以提供 Cookie,而不是往返于标识提供者以重新获取安全令牌。 有关会话如何使用 WIF 运行的详细信息,请参阅 WIF 会话管理。
注意
<securityTokenHandlers> 配置元素可用于指定SessionSecurityTokenHandler负责保护应用程序会话的 。 开发人员在更改此配置设置时应谨慎,因为系统配置错误可能会导致应用程序泄露。 例如,指定派生 SessionSecurityTokenHandler 并将一个空转换 (CookieTransform) 集合传递到基集合,将导致用户标识被序列化为不受保护的 Cookie。 这可能允许攻击者修改标识,从而更改访问权限。
如果会话令牌处于引用模式,即其 SessionSecurityToken.IsReferenceMode 属性为 true
,则会话令牌处理程序仅序列化会话令牌的属性,这些属性是在 中 SessionSecurityTokenCache重新生成其密钥所需的。 在默认情况下, SessionSecurityTokenCacheKey 类用于表示缓存密钥,令牌处理程序写入 SessionSecurityToken.ContextId 令牌的 和 SessionSecurityToken.KeyGeneration 属性。 如果会话令牌不处于引用模式,即 SessionSecurityToken.IsReferenceMode 属性为 false
,那么除了前面提到的属性外,处理程序还会在从令牌序列化的字节数组上调用 ApplyTransforms 方法,并将生成的值存储在 Cookie 中。 有关如何序列化令牌的更多详细信息,请参阅 SessionSecurityTokenHandler.WriteToken(XmlWriter, SecurityToken) 方法。
属性 Transforms 获取应用于 方法中的 ApplyTransforms 会话令牌的转换列表。 所有转换都派生自 CookieTransform 类。 在默认情况下, DeflateCookieTransform 应用 和 ProtectedDataCookieTransform 。 使用 ProtectedDataCookieTransform 数据保护 API (DPAPI) 来保护 Cookie 材料。 DPAPI 使用特定于在其保护算法中运行它的计算机的密钥。 因此,默认会话令牌处理程序在 Web 场方案中不可用,因为在这种情况下,可能需要在另一台计算机上读取写入的令牌。 可以使用多种策略来规避此问题。 例如,你能够:
将 默认值 SessionSecurityTokenHandler 替换为 MachineKeySessionSecurityTokenHandler。 MachineKeySessionSecurityTokenHandler使你能够在配置文件的 ASP.NET
<machineKey>
元素下指定签名和加密密钥。在 global.asax.cs 文件中为 FederatedAuthentication.FederationConfigurationCreated 事件提供处理程序,并将默认会话令牌处理程序替换为具有转换列表(包括 RsaSignatureCookieTransform 和 )的 RsaEncryptionCookieTransform实例SessionSecurityTokenHandler。 可以通过调用采用转换列表的构造函数之一来创建新实例。
从 CookieTransform 基类派生自定义转换,并使用上述方法将其包含在要应用的转换列表中。
从 SessionSecurityTokenHandler 派生自定义令牌处理程序,并实现你自己的机制。
有关在 Web 场方案中使用会话的详细信息,请参阅 WIF 和 Web 场。
包含在SessionSecurityTokenHandler默认令牌处理程序集合中;但是,可以通过先在 securityTokenHandlers> 元素下<指定 <remove> 元素以从集合中删除默认处理程序,然后使用 add> 元素添加自定义令牌处理程序,将其替换为自定义会话令牌处理程序<。 默认情况下,可以通过在 元素下<add>
包括 <sessionTokenRequirement> 元素来指定默认令牌生存期。 可以通过重写 LoadCustomConfiguration 方法来设计自定义令牌处理程序,以在 元素下<add>
获取自定义配置元素,以提供用于处理这些元素的逻辑。
构造函数
SessionSecurityTokenHandler() |
初始化使用默认 Cookie 转换和令牌生存期的 SessionSecurityTokenHandler 类的新实例。 |
SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>) |
初始化使用指定的 cookie 转换 SessionSecurityTokenHandler 类的新实例。 |
SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>, TimeSpan) |
初始化使用指定 Cookie 转换和令牌生存期的 SessionSecurityTokenHandler 类的新实例。 |
字段
DefaultCookieTransforms |
一个只读集合,它包含要应用于 Cookie(DeflateCookieTransform 和 ProtectedDataCookieTransform)的默认转换的列表。 |
DefaultLifetime |
一个常量,它指定 Cookie 的默认生存期为 10 小时。 |
属性
CanValidateToken |
获取一个值,该值指示此处理程序是否支持对 SessionSecurityToken 类型的标记进行验证。 |
CanWriteToken |
获取指示此处理程序能否写入 SessionSecurityToken 类型的标记的值。 |
Configuration |
获取或设置提供配置当前实例的 SecurityTokenHandlerConfiguration 对象。 (继承自 SecurityTokenHandler) |
ContainingCollection |
获取包含当前实例的标记处理程序集合。 (继承自 SecurityTokenHandler) |
CookieElementName |
获取 Cookie 元素的名称。 |
CookieNamespace |
获取 Cookie 元素的命名空间。 |
DefaultTokenLifetime |
获取默认的令牌生存期。 |
TokenLifetime |
获取或设置标记生存期。 |
TokenType |
获取此处理程序处理的标记的类型。 |
Transforms |
获取要应用在 cookie 上的转换。 |