如何:保护元数据终结点
服务的元数据中可能包含恶意用户可以利用的关于您的应用程序的敏感信息。服务使用者可能还要求一种用于获取关于服务的元数据的安全机制。因此,有时需要使用安全终结点来发布元数据。
通常使用在用于保护应用程序终结点的 Windows Communication Foundation (WCF) 中定义的标准安全机制来保护元数据终结点。(有关更多信息,请参见 安全性概述。)
本主题演示创建由安全套接字层 (SSL) 证书保护的终结点(换言之,HTTPS 终结点)的步骤。
在代码中创建安全的 HTTPS GET 元数据终结点
使用适当的 X.509 证书配置端口。该证书必须来自受信任的颁发机构,而且还必须有既定的“服务授权”用途。必须使用 HttpCfg.exe 工具将该证书附加到该端口。请参见如何:使用 SSL 证书配置端口。
提示
该证书或其域名系统 (DNS) 的主题必须与计算机的名称匹配。这一点非常重要,原因是 HTTPS 机制所执行的前几个步骤之一是检查是否将证书颁发给了在其上调用了该证书的地址的统一资源标识符 (URI)。
创建 ServiceMetadataBehavior 类的新实例。
将 ServiceMetadataBehavior 类的 HttpsGetEnabled 属性设置为 true。
将 HttpsGetUrl 属性设置为适当的 URL。请注意,如果指定绝对地址,则 URL 必须以方案“https://”开始。如果指定相对地址,则必须为服务主机提供一个 HTTPS 基址。如果不设置此属性,则默认地址为 "",或者直接为服务的 HTTPS 基址。
将该实例添加到 ServiceDescription 类的 Behaviors 属性返回的行为集合中,如下面的代码所示:
在配置中创建安全的 HTTPS GET 元数据终结点
将 <behaviors> 元素添加到服务配置文件的 <system.ServiceModel> 元素中。
向 <Behaviors> 元素中添加一个 <serviceBehaviors> 元素。
向 <serviceBehaviors> 元素中添加一个 <behavior> of <serviceBehaviors> 元素。
将 <behavior> 元素的 name 属性设置为适当的值。需要 name 属性。下面的示例使用
mySvcBehavior
值。向 <behavior> 元素中添加一个 <serviceMetadata> Element。
将 <serviceMetadata> 元素的 httpsGetEnabled 属性设置为 true。
将 <serviceMetadata> 元素的 httpsGetUrl 属性设置为适当的值。请注意,如果指定绝对地址,则 URL 必须以方案“https://”开始。如果指定相对地址,则必须为服务主机提供一个 HTTPS 基址。如果不设置此属性,则默认地址为 "",或者直接为服务的 HTTPS 基址。
若要将该行为用于服务,需要将 <service> 元素的 behaviorConfiguration 属性设置为该行为元素的名称属性的值下面的配置代码演示了一个完整的示例。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="mySvcBehavior"> <serviceMetadata httpsGetEnabled="true" httpsGetUrl="https://localhost:8036/calcMetadata" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="mySvcBehavior" name="Microsoft.Security.Samples.Calculator"> <endpoint address="https://localhost:8037/ServiceModelSamples/calculator" binding="wsHttpBinding" bindingConfiguration="" contract="Microsoft.Security.Samples.ICalculator" /> </service> </services> </system.serviceModel> </configuration>
示例
下面的示例创建 ServiceHost 类的一个实例并添加一个终结点。然后,该代码创建 ServiceMetadataBehavior 类的一个实例并设置属性以创建一个安全的元数据交换点。
编译代码
该代码示例使用下列命名空间:
另请参见
任务
参考
HttpsGetEnabled
ServiceMetadataBehavior
HttpsGetUrl