webHttpBinding 安全不包含消息节点?

Posted

技术标签:

【中文标题】webHttpBinding 安全不包含消息节点?【英文标题】:webHttpBinding security does not contain message node? 【发布时间】:2012-04-10 18:35:43 【问题描述】:

我正在尝试将客户端证书应用于 WCF REST 服务。我发现了一些有关应用具有以下内容的客户端证书的详细信息:

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding">
      <security>
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

在这种情况下,似乎没有问题。但是,我正在使用 webHttpBinding,但我收到一条错误消息,指出 messagesecurity 节点的无效子节点。

我会不正确地设置客户端证书吗?谁能指出我正确的方向。

【问题讨论】:

【参考方案1】:

wsHttpBinding 配置中的消息节点是关于配置 SOAP 消息安全头的,这就是为什么它对 webHttpBinding 无效的原因,它不是基于 SOAP(它是 REST)的

REST 服务的适当安全性很可能是传输级别 - 即 HTTPS。

如果您想使用消息级别的安全性,您需要切换到 SOAP,但消息级别是相当专业的,在大多数情况下没有必要。

如果您需要为 webHttpBinding 使用证书(这意味着使用双向 SSL),您需要将 securityMode 设置为 Transport 并将 clientCredentialType 属性设置为 Certificate。在配置中,在服务器端是这样的

  <webHttpBinding>
    <binding name="ClientCertServerSide">
      <security mode="Transport" >
       <transport clientCredentialType="Certificate"/>
      </security> 
    </binding>
  </webHttpBinding> 

在客户端,您可以在代码中(使用HttpWebRequest.ClientCertificates 属性)或在配置中指定证书。在配置中它看起来像

    <endpointBehaviors>
        <behavior name="ClientCertClientSide">
            <clientCredentials>
                <clientCertificate findValue="put the cert name here" storeLocation="put the store here" />
            </clientCredentials>
        </behavior>
    </endpointBehaviors>

【讨论】:

以上是关于webHttpBinding 安全不包含消息节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 webHttpBinding?

用于支持 HTTP 和 HTTPS 的 WebHttpBinding(Restful) 的 WCF 配置

在主机('Anonymous')上配置的身份验证方案不允许在绑定'WebHttpBinding'('Basic')上配置的那些

WCF 413 请求实体太大 - 自托管 WebHttpBinding

有没有办法让客户端连接到现有的 WCF Web Http 服务而不使用 .Net Core 2 中的 WebHttpBinding?

如何在 webhttpbinding 配置中设置代理以使用提琴手