如何:创建自定义客户端标识验证工具

Windows Communication Foundation (WCF) 的标识**功能使客户端能够预先指定服务所需的标识。无论服务器何时向客户端验证其自身身份,都将检查该标识是否为所需的标识。(有关标识的解释及其工作原理,请参见服务标识和身份验证。)

如果需要,可使用自定义标识验证工具自定义该验证。例如,您可以执行其他服务标识验证检查。在本示例中,自定义标识验证工具将检查从服务器返回的 X.509 证书中的其他声明。有关示例应用程序,请参见Identity

扩展 EndpointIdentity 类

  1. 定义一个从 EndpointIdentity 类派生的新类。本示例将此扩展命名为 OrgEndpointIdentity

  2. 添加私有成员和属性,扩展的 IdentityVerifier 类将使用这些属性根据从服务返回的安全令牌中的声明执行标识检查。本示例定义一个属性:OrganizationClaim 属性。

扩展 IdentityVerifier 类

  1. 定义一个从 IdentityVerifier 派生的新类。本示例将此扩展命名为 CustomIdentityVerifier

  2. 重写 CheckAccess 方法。该方法确定标识检查是成功还是失败。

  3. CheckAccess 方法有两个参数。第一个参数是 EndpointIdentity 类的一个实例。第二个参数是 AuthorizationContext 类的一个实例。

    在方法的实现过程中,检查 AuthorizationContext 类的 ClaimSets 属性返回的声明集合,并根据需要执行身份验证检查。本示例首先查找类型为“可分辨名称”的任何声明,然后将此名称与 EndpointIdentity 扩展的名称 (OrgEndpointIdentity) 进行比较。

实现 TryGetIdentity 方法

  1. 实现 TryGetIdentity 方法,该方法确定客户端是否可返回 EndpointIdentity 类的实例。WCF 基础结构首先调用 TryGetIdentity 方法的实现来检索消息中的服务标识。然后,该基础结构使用返回的 EndpointIdentityAuthorizationContext 调用 CheckAccess 实现。

  2. TryGetIdentity 方法中,添加以下代码:

实现自定义绑定并设置自定义标识验证工具

  1. 创建一个返回 Binding 对象的方法。本示例首先创建 WSHttpBinding 类的一个实例,然后将其安全模式设置为 Message,并且将其 ClientCredentialType 设置为 None

  2. 使用 CreateBindingElements 方法创建一个 BindingElementCollection

  3. 从集合返回 SecurityBindingElement,并将其强制转换为一个 SymmetricSecurityBindingElement 变量。

  4. LocalClientSecuritySettings 类的 IdentityVerifier 属性设置为先前创建的 CustomIdentityVerifier 类的一个新实例。

  5. 使用返回的自定义绑定创建客户端和类的一个实例。然后,客户端可执行服务的自定义标识验证检查,如以下代码中所示。

示例

下面的示例演示 IdentityVerifier 类的完整实现。

下面的示例演示 EndpointIdentity 类的完整实现。

另请参见

参考

ServiceAuthorizationManager
EndpointIdentity
IdentityVerifier

其他资源

Identity Sample
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample