2010-02-05 3 views
4

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

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

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

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

Если вы хотите включить фрагменты кода или XML (например, configs), вам нужно выделить эти строки в своем сообщении, а затем использовать кнопку «code» (101 010) на панели инструментов редактора (или нажать Ctrl-K на ваша клавиатура), чтобы они были хорошо отформатированы и выделены синтаксис. В противном случае ваш пост действительно трудно читать, а XML даже не появится! –

ответ

0

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

Так что в вашем случае, попробуйте следующее:

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

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

+1

Спасибо, marc_s. Это то, что я пытался использовать для привязки tcp на первом месте, но он не работает - он не заставляет NTLM. Из средства просмотра событий я вижу, что он все еще пытается использовать Kerberos, который не настроен в среде. Следовательно, служебный вызов терпит неудачу. Интересно, что он работает, если я укажу IP-адрес, а не полное имя (имя хоста плюс домен) серверной машины. В этом случае он использует NTLM. Я вижу это из средства просмотра событий. – ablei2000

5

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

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

EndPointAddress myEdpintAddress = new EndPointAddress(stringURL); 

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

Без параметров EndPointIdentity свойство Идентичность в объекте EndpointAddress является нулевым, и формирует «... цель основное имя недействительны ..." ошибка на стороне сервера.

B. Наши domai n поддерживает аутентификацию 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 callfull; служба использует Kerberos для аутентификации. Неправильное или отсутствующее значение для аутентификации upn Ntlm аутентификация

Спасибо.

Смежные вопросы