Wcf 如何使用端点的TransportWithMessageCredential安全模式验证wsdl get?
我有一个WCF端点,它公开了一个带有Wcf 如何使用端点的TransportWithMessageCredential安全模式验证wsdl get?,wcf,iis,wcf-binding,wcf-security,Wcf,Iis,Wcf Binding,Wcf Security,我有一个WCF端点,它公开了一个带有basicHttpBinding的API。此投标设置为使用安全模式TransportWithMessageCredentialandUserName进行clientCredentialType 因为安全性是在消息级别实现的,所以在WCF上,IIS需要允许匿名访问。因此,可以在不提供任何凭据的情况下获取wsdl 如何强制身份验证以获取服务元数据 在这里,当前的服务配置看起来像(来自web.config) 我尝试使用服务行为配置为metatada设置特定绑定:
basicHttpBinding
的API。此投标设置为使用安全模式TransportWithMessageCredentialand
UserName
进行clientCredentialType
因为安全性是在消息级别实现的,所以在WCF上,IIS需要允许匿名访问。因此,可以在不提供任何凭据的情况下获取wsdl
如何强制身份验证以获取服务元数据
在这里,当前的服务配置看起来像(来自web.config)
我尝试使用服务行为配置为metatada设置特定绑定:
<behavior name="secure">
<serviceMetadata httpsGetEnabled="true" httpsGetBinding="basicHttpBinding" httpsGetBindingConfiguration="transportSecure" />
</behavior>
//and add the new binding
<basicHttpBinding>
<binding name="transportSecure">
<security mode="Transport">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
//并添加新的绑定
但它不受支持。它抛出了这样的信息:
MessageVersion'Soap11()
地址无
()“不是
在本场景中支持。仅MessageVersion“信封”一个
()地址无
()是
支持
我不理解这个错误,也不知道如何避免它。通常我们不会在生产环境中公开我们的元数据,但是如果您想启用元数据,我们可以使用https绑定来保护元数据 1.使用适当的X.509证书配置端口。证书必须来自受信任的机构,并且必须具有“服务授权”的预期用途。必须使用HttpCfg.exe工具将证书附加到端口 2.创建ServiceMetadataBehavior类的新实例 3.将ServiceMetadataBehavior类的HttpsGetEnabled属性设置为true 4.将HttpsGetUrl属性设置为适当的URL。请注意,如果指定绝对地址,则URL必须以https:///方案开头。如果指定相对地址,则必须为服务主机提供HTTPS基址。如果未设置此属性,则默认地址为“”,或直接位于服务的HTTPS基址 5.将实例添加到ServiceDescription类的behaviors属性返回的behaviors集合中,如下代码所示
ServiceMetadataBehavior sb = new ServiceMetadataBehavior();
sb.HttpsGetEnabled = true;
sb.HttpsGetUrl = new Uri("https://myMachineName:8036/myEndpoint");
myServiceHost.Description.Behaviors.Add(sb);
myServiceHost.Open();
这是在WCF上启用的身份验证,您还可以在IIS上启用windows身份验证,这两种方法都可以保护元数据
但是在生产环境中,我不建议您启用元数据,因为这会导致元数据泄漏的风险。WCF服务的调用也可以通过channel factory调用。在这种情况下,我们可以在不知道服务器元数据的情况下调用WCF服务
有关如何保护元数据的详细信息,请参阅以下链接:
通常我们不会在生产环境中公开我们的元数据,但是如果您想启用元数据,我们可以使用https绑定来保护元数据 1.使用适当的X.509证书配置端口。证书必须来自受信任的机构,并且必须具有“服务授权”的预期用途。必须使用HttpCfg.exe工具将证书附加到端口 2.创建ServiceMetadataBehavior类的新实例 3.将ServiceMetadataBehavior类的HttpsGetEnabled属性设置为true 4.将HttpsGetUrl属性设置为适当的URL。请注意,如果指定绝对地址,则URL必须以https:///方案开头。如果指定相对地址,则必须为服务主机提供HTTPS基址。如果未设置此属性,则默认地址为“”,或直接位于服务的HTTPS基址 5.将实例添加到ServiceDescription类的behaviors属性返回的behaviors集合中,如下代码所示
ServiceMetadataBehavior sb = new ServiceMetadataBehavior();
sb.HttpsGetEnabled = true;
sb.HttpsGetUrl = new Uri("https://myMachineName:8036/myEndpoint");
myServiceHost.Description.Behaviors.Add(sb);
myServiceHost.Open();
这是在WCF上启用的身份验证,您还可以在IIS上启用windows身份验证,这两种方法都可以保护元数据
但是在生产环境中,我不建议您启用元数据,因为这会导致元数据泄漏的风险。WCF服务的调用也可以通过channel factory调用。在这种情况下,我们可以在不知道服务器元数据的情况下调用WCF服务
有关如何保护元数据的详细信息,请参阅以下链接: