客户端验证

服务经常发布元数据,以启用客户端代理类型的自动生成和配置。 当服务不受信任时,客户端应用程序应验证元数据是否符合客户端应用程序的安全、事务、服务协定类型等策略。 以下示例演示如何编写客户端终结点行为,该行为验证服务终结点以确保服务终结点安全使用。

该服务公开四个服务终结点。 第一终结点使用 WSDualHttpBinding,第二终结点使用 NTLM 身份验证,第三终结点启用事务流,第四终结点使用基于证书的身份验证。

客户端使用 MetadataResolver 类检索服务的元数据。 客户端强制实施禁用双工绑定、NTLM 身份验证和使用验证行为的事务流的策略。 对于从服务的元数据导入的每个ServiceEndpoint实例,客户端应用程序在尝试使用 Windows Communication Foundation(WCF)客户端连接到终结点之前,会将一个InternetClientValidatorBehavior终结点行为实例添加到ServiceEndpoint。 行为 Validate 的方法在调用服务的任何操作之前运行,并通过引发 InvalidOperationExceptions来执行客户端的策略。

生成示例

  1. 要生成解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

在同一计算机上运行示例

  1. 使用管理员权限打开 Visual Studio 开发人员命令提示符,并从示例安装文件夹运行 Setup.bat。 这会安装运行示例所需的所有证书。

  2. 从 \service\bin\Debug 运行服务应用程序。

  3. 从 \client\bin\Debug 运行客户端应用程序。 客户端活动显示在客户端控制台应用程序中。

  4. 如果客户端和服务无法通信,请参阅 WCF 示例 故障排除提示。

  5. 完成示例后,通过运行 Cleanup.bat 来删除证书。 其他安全示例使用相同的证书。

跨计算机运行示例

  1. 在服务器上,在 Visual Studio 开发人员命令提示符下,使用管理员权限运行,键入 setup.bat service。 使用 setup.bat 参数运行 service,则使用计算机的完全限定域名创建一个服务证书,并将此服务证书导出到名为 Service.cer 的文件中。

  2. 在服务器上,编辑 App.config 以反映新的证书名称。 也就是说,将 findValue 属性在 <serviceCertificate> 元素中更改为计算机的完全限定域名。

  3. 将Service.cer文件从服务目录复制到客户端计算机上的客户端目录。

  4. 在客户端上,使用管理员权限打开 Visual Studio 开发人员命令提示符,然后键入 setup.bat client。 使用setup.bat参数运行client将创建名为 Client.com 的客户端证书,并将客户端证书导出到名为Client.cer的文件。

  5. 在 client.cs 文件中更改 MEX 终结点的地址值和用于设置默认服务器证书的 findValue 以与服务的新地址相匹配。 通过使用服务器的完全限定域名替换 localhost 来执行此操作。 Rebuild。

  6. 将Client.cer文件从客户端目录复制到服务器上的服务目录。

  7. 在客户端上,使用管理员权限打开的 Visual Studio 开发人员命令提示符中运行 ImportServiceCert.bat。 这会将服务证书从 Service.cer 文件导入 CurrentUser - TrustedPeople 存储中。

  8. 在服务器上,使用管理员权限打开的 Visual Studio 开发人员命令提示符中运行 ImportClientCert.bat。 这会将客户端证书从 Client.cer 文件导入 LocalMachine - TrustedPeople 存储。

  9. 在服务计算机上,在 Visual Studio 中生成服务项目并运行 service.exe。

  10. 在客户端计算机上,运行 client.exe。

    1. 如果客户端和服务无法通信,请参阅 WCF 示例 故障排除提示。

运行示例后进行清理

  • 运行完示例后,在示例文件夹中运行 Cleanup.bat。

    注释

    在跨计算机运行此示例时,此脚本不会删除客户端上的服务证书。 如果已运行跨计算机使用证书的 WCF 示例,请确保清除已在 CurrentUser - TrustedPeople 存储中安装的服务证书。 为此,请使用以下命令: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com

另请参阅