WCF绑定传输/ Windows绑定安全性未被强制执行

时间:2012-08-10 18:41:09

标签: wcf wcf-security

我正在使用Windows身份验证将SSL安全性添加到以前不安全的IIS托管WCF服务应用程序中。令我惊讶的是,我发现其中两个服务端点已经在使用带有传输和Windows安全性的绑定。这很令人困惑,因为使用此服务的客户端应用程序未配置为使用传输安全性或Windows凭据。这是服务配置:

<binding name="LargeBuffer" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
    maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    <security mode="Transport">
    <transport clientCredentialType="Windows" />
    </security>
</binding>

...

<service behaviorConfiguration="WebServices.GCServiceBehavior"
    name="WebServices.GCService">
    <endpoint address="" binding="basicHttpBinding" name="GCSecuredEndpoint"
        bindingName="largeBuffer" contract="WebServices.IGCService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

当我使用Visual Studio生成客户端代理和配置时,它会创建:

<binding name="GCSecuredEndpoint" closeTimeout="00:01:00"
    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
    useDefaultWebProxy="true">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
</binding>

...

<endpoint address="http://devservices.mysite.com/GCService/GCService.svc"
    binding="basicHttpBinding" bindingConfiguration="GCSecuredEndpoint"
    contract="GCSvc.IGCService" name="GCSecuredEndpoint" />

注意它的安全模式=“无”,并且Transport ClientCredentialType是None而不是Windows。当我在GCService上调用方法时,它会成功。我希望它首先抱怨我试图通过http而不是https访问,但事实并非如此。接下来我希望它不会验证或抱怨客户端端点在身份验证方面与服务不匹配,但事实并非如此。

我在同一个应用程序中有另一项服务,我刚刚使用Transport / Windows安全设置,没有所有缓冲区/ readquota内容。对于初学者,当我在VS中为此服务生成客户端代理/配置时,它会自动使用https地址,传输安全性和Windows身份验证。如果我手动将其更改为对两者都使用None,如上所述,对其中一个服务方法的调用不会如预期那样成功。为什么GCService能够正常运行?

1 个答案:

答案 0 :(得分:0)

服务器配置

bindingName="largeBuffer"

而不是

bindingConfiguration="LargeBuffer"

从未使用过LargeBuffer绑定配置。