WCF - Как настроить netTcpBinding для проверки подлинности NTLM? - PullRequest
4 голосов
/ 05 февраля 2010

Я знаю, как настроить basicHttpBinding для аутентификации NTLM, но не могу найти способ сделать то же самое для netTcpBinding.

Поддерживает ли netTcpBinding NTLM? Если да, то как заставить службу WCF использовать NTLM?

Кстати, хорошо известный метод, использующий элемент идентификации по какой-то причине, вообще не работал. Я ищу что-то вроде этого - clientCredentialType = "Ntlm", но для TCP. Вот основные настройки http:

<basicHttpBinding>
  <binding name="BasicHttpBinding">
  <security mode ="TransportCredentialOnly">
  <transport clientCredentialType ="Ntlm"/>
  </security>
  </binding>
</basicHttpBinding>

Ответы [ 2 ]

5 голосов
/ 14 февраля 2010

Вот исчерпывающий ответ, который я наконец нашел, протестировал и подтвердил.

A. Мой WCF-клиент использовал для динамического построения EndPoint.Address, как указано ниже

EndPointAddress  myEdpintAddress = new EndPointAddress(stringURL);

Но в случае безопасного транспорта (net.tcp) он должен быть инициализирован следующим образом EndPointAddress myEdpintAddress = new EndPointAddress(new UrRL(string), myEndPointIdentity)

Без параметров EndPointIdentity свойство Identity в объекте EndPointAddress имеет значение NULL и создает ошибку «... имя целевого субъекта неверно ...» на стороне сервера.

B. Наш контроллер домена поддерживает аутентификацию Kerberos и Ntlm. После выполнения вышеизложенного обычно на стороне клиента есть четыре сценария конфигурации для привязки net.tcp, если безопасность отличается от «None», а служба WCF работает как учетная запись домена:

  1. Нет <identity> элементов в указанной конечной точке клиента - сбой вызова WCF

  2. <identity> предоставляется элемент, но с пустым значением для элементов dns, userPrioncipalName или servicePrincipalName - вызов WCF выполнен успешно, но используется проверка подлинности Ntlm

  3. <identity> элемент, снабженный значением a для dsn или SPN - вызов WCF успешен; Сервис использует Ntlm для аутентификации.

  4. <identity> элементу предоставлено правильное значение для upn - вызов WCF успешен; Сервис использует Kerberos для аутентификации. Неверное или отсутствующее значение для проверки подлинности Ntlm триггера upn

Спасибо.

0 голосов
/ 05 февраля 2010

Связывание Net TCP не поддерживает «NTLM» в качестве типа учетных данных клиента - у вас есть выбор только None, Windows или Certificate (см. Документы MSDN для TcpClientCredentialType ) .

Так что в вашем случае попробуйте это:

<netTcpBinding>
  <binding name="tcpWindows">
    <security mode ="TransportCredentialOnly">
      <transport clientCredentialType ="Windows"/>
    </security>
  </binding>
</netTcpBinding>

Любая причина, почему это не работает ??

...