Транспорт привязки WCF / безопасность привязки Windows не обеспечивается

Я добавляю SSL-безопасность с проверкой подлинности Windows в ранее незащищенное приложение службы WCF, размещенное в IIS. К моему удивлению, я обнаружил, что две конечные точки службы уже использовали привязку с транспортом и безопасностью 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" />

Обратите внимание, что это режим безопасности = "None" и Transport ClientCredentialType имеет значение None вместо Windows. Когда я вызываю метод в GCService, он успешен. Я ожидал, что он сначала пожалуется, что я пытаюсь получить доступ через http вместо https, но это не так. Затем я ожидал бы, что он не аутентифицируется или не будет жаловаться на то, что конечная точка клиента не соответствует службе с точки зрения аутентификации, но это не так.

У меня есть еще одна служба в том же приложении, которое я только что настроил с безопасностью транспорта / Windows, только без всего буфера / квоты чтения. Во-первых, когда я создаю клиентский прокси / конфигурацию в VS для этой службы, он автоматически использует адрес https, безопасность транспорта и аутентификацию Windows. Если я вручную изменю его, чтобы использовать None для обоих, как указано выше, вызов одного из методов службы не будет успешным, как и ожидалось. Почему GCService выше работает?


person xr280xr    schedule 10.08.2012    source источник


Ответы (1)


Конфигурация сервера имеет

bindingName="largeBuffer"

вместо

bindingConfiguration="LargeBuffer"

Конфигурация привязки LargeBuffer никогда не использовалась.

person xr280xr    schedule 11.08.2012