Клиентская конечная точка WCF: SecurityNegotiationException без <DNS>

У меня есть странная ситуация здесь. Я получил его работа, но я не понимаю почему. Ситуация следующие:

Существует сервис WCF, который должно назвать мое приложение (веб-сайт). Сервис WCF выставляет netTcpBinding и требует Транспортной безопасности (Windows). Клиент и сервер находится в том же домене, но на различных серверах.
Так генерация клиента приводит к следующей конфигурации (главным образом значения по умолчанию)

<system.serviceModel>
    <bindings>
      <netTcpBinding>
         <binding name="MyTcpEndpoint" ...>          
              <reliableSession ordered="true" inactivityTimeout="00:10:00"
                              enabled="false" />
             <security mode="Transport">
                <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
                <message clientCredentialType="Windows" />
            </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client> 
        <endpoint address="net.tcp://localhost:xxxxx/xxxx/xxx/1.0" 
                   binding="netTcpBinding" bindingConfiguration="MyTcpEndpoint" 
                   contract="Service.IMyService" name="TcpEndpoint"/>
    </client>
</system.serviceModel>

Когда я выполняю веб-сайт и выполняю вызов к сервису, я получаю следующую ошибку:

System.ServiceModel.Security.SecurityNegotiationException: Either the target name is incorrect or the server has rejected the client credentials. ---> System.Security.Authentication.InvalidCredentialException: Either the target name is incorrect or the server has rejected the client credentials. ---> System.ComponentModel.Win32Exception: The logon attempt failed
    --- End of inner exception stack trace ---
    at System.Net.Security.NegoState.EndProcessAuthentication(IAsyncResult result)
    at System.Net.Security.NegotiateStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
    at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.InitiateUpgradeAsyncResult.OnCompleteAuthenticateAsClient(IAsyncResult result)
    at System.ServiceModel.Channels.StreamSecurityUpgradeInitiatorAsyncResult.CompleteAuthenticateAsClient(IAsyncResult result)
    --- End of inner exception stack trace ---

Server stack trace: 
    at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
    at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
....

Теперь, если я просто изменяю конфигурацию клиента как так:

    <endpoint address="net.tcp://localhost:xxxxx/xxxx/xxx/1.0" 
               binding="netTcpBinding" bindingConfiguration="MyTcpEndpoint" 
               contract="Service.IMyService" name="TcpEndpoint">
        <identity>
            <dns />
        </identity> 
  </endpoint>

все работает, и мой сервер счастливо сообщает, что это назвала сервисная учетная запись, которая размещает AppPool для моего веб-сайта. Вся польза.

Мой вопрос теперь: почему это работает? Что это делает? Я добрался до этого решения эмпирическим простым. Мне кажется что весь <dns /> тег делает, говорят клиенту использовать DNS по умолчанию для аутентификации, но разве это не делает этого так или иначе?

ОБНОВЛЕНИЕ
Таким образом, после еще некоторого исследования и эмпирический, я все еще не нашел решение этой проблемы. В некоторых случаях, если я не обеспечиваю <dns />, Я добираюсь Credentials rejected ошибка, но если я обеспечиваю <dns value="whatever"/>конфигурация, это работает. Почему?

21
задан Brian Tompsett - 汤莱恩 28 June 2017 в 22:21
поделиться

1 ответ

Тег

позволяет клиенту проверить идентичность сервера. Например, если вы сказали , это подтвердит, что сервер WCF предоставляет идентификационные данные google.com. Поскольку вы говорите , это, вероятно, позволяет всем служить вам.

Дополнительная информация на Идентификация и аутентификация службы

17
ответ дан 29 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: