如何:创建自定义安全令牌身份验证器
本主题演示如何创建自定义安全令牌身份验证器以及如何将其与自定义安全令牌管理器相集成。安全令牌身份验证器可验证随传入消息一起提供的安全令牌的内容。如果验证成功,身份验证器将返回 IAuthorizationPolicy 实例的集合,该集合经过计算后可返回一组声明。
若要在 Windows Communication Foundation (WCF) 中使用自定义安全令牌身份验证器,必须首先创建自定义凭据和安全令牌管理器实现。有关创建自定义凭据和安全令牌管理器的更多信息,请参见如何:创建自定义客户端和服务凭据。有关凭据、安全令牌管理器、提供程序和身份验证器类的更多信息,请参见安全体系结构。
过程
创建自定义安全令牌身份验证器
定义一个从 SecurityTokenAuthenticator 类派生的新类。
重写 CanValidateTokenCore 方法。此方法返回
true
或false
,具体取决于自定义身份验证器是否可以验证传入的令牌类型。重写 ValidateTokenCore 方法。此方法需要适当地验证令牌内容。如果此令牌通过验证步骤,它将返回 IAuthorizationPolicy 实例的集合。下面的示例使用将在后面的过程中创建的自定义授权策略实现。
上面的代码返回 CanValidateToken 方法中授权策略的集合。WCF 并不提供此接口的公共实现。下面的过程演示如何针对您自己的要求实现此目的。
创建自定义授权策略
定义一个实现 IAuthorizationPolicy 接口的新类。
实现 Id 只读属性。实现此属性的一个方法是在类构造函数中生成一个全局唯一标识符 (GUID),并在每次请求此属性的值时返回该标识符。
实现 Issuer 只读属性。此属性需要返回从令牌获取的声明集的颁发者。此颁发者应该与令牌颁发者负责验证令牌内容的颁发机构相对应。下面的示例使用了颁发者声明,该声明从前面的过程中创建的自定义安全令牌身份验证器传递给此类。自定义安全令牌身份验证器使用系统提供的声明集(由 System 属性返回)来表示用户名令牌的颁发者。
实现 Evaluate 方法。此方法使用基于传入安全令牌内容的声明来填充 EvaluationContext 类的实例(以参数形式传入)。当此方法完成计算时返回
true
。如果该实现依赖于为计算上下文提供附加信息的其他授权策略,则在计算上下文中不存在所要求的信息时,此方法可返回false
。在这种情况下,如果这些授权策略之中至少有一个修改了计算上下文,WCF 在计算为传入消息生成的所有其他授权策略后,将再次调用此方法。
如何:创建自定义客户端和服务凭据 说明如何创建自定义凭据和自定义安全令牌管理器。若要使用此处创建的自定义安全令牌身份验证器,可以修改安全令牌管理器的实现,以便从 CreateSecurityTokenAuthenticator 方法返回自定义身份验证器。当传入适当的安全令牌要求时,该方法将返回身份验证器。
使自定义安全令牌身份验证器与自定义安全令牌管理器相集成
在自定义安全令牌管理器实现中重写 CreateSecurityTokenAuthenticator 方法。
向该方法添加逻辑,使其能够基于 SecurityTokenRequirement 参数返回您的自定义安全令牌身份验证器。如果令牌要求的令牌类型为用户名(由 UserName 属性表示),并且正在为其请求安全令牌身份验证器的消息方向为输入(由 Input 字段表示),则下面的示例将返回自定义安全令牌身份验证器。
另请参见
任务
参考
SecurityTokenAuthenticator
SecurityTokenRequirement
SecurityTokenManager
UserNameSecurityToken