Клиент Windows 8.1 WCF не может подключиться к службе с дайджест-аутентификацией через BasicHttpBinding

У меня проблема с моим приложением WCF при подключении клиента из Windows 8.1. Я схожу с ума по этому поводу последние пару дней и не могу в этом разобраться. Вот сценарий:

Моя служба WCF довольно проста. Он использует basicHttpBinding с режимом безопасности TransportCredentialOnly и дайджест-тип учетных данных клиента. (Файл web.config находится здесь: http://pastebin.com/LsWmcfTs). Он делает это таким образом, поскольку мне нужен идентификатор Windows на стороне сервера.

Мой клиент - консольное приложение, сбой происходит, когда он пытается вызвать метод Ping в моей службе (который просто возвращает текст Pong). Код, используемый для подключения к службе, приведен ниже:

var basicBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Digest;

var client = new TestExecutionEngineClient(basicBinding, new EndpointAddress(uri));

client.Open();

client.Ping();

Это работало более года на всех подключающихся клиентах All, кроме Windows 8.1, то есть там, где это никогда не работало.

Когда он попадает в client.Ping (); Я получаю исключение ниже:

Исключение:

HTTP-запрос неавторизован со схемой аутентификации клиента «Дайджест». Заголовок аутентификации, полученный от сервера, имел следующий вид: "Digest qop =" auth ", algorithm = MD5-sess, nonce =" + Upgraded + v1c1d404aaeb7edbba8daf132fea97aa12243033a0f40acf01376892331a408411c85513f482eab7502b8998c8 ",

Внутреннее исключение:

Удаленный сервер возвратил ошибку: (401) Неавторизованный.

Базовое исключение:

В пакете безопасности нет учетных данных

Насколько я могу судить, похоже, что сторона сервера запрашивает дайджест (правильно), а клиент аутентифицируется в дайджесте, но он его не принимает ...

Любая помощь будет принята с благодарностью. Спасибо


person Tom Beech    schedule 06.01.2014    source источник
comment
Согласно MSDN, в Windows 8.1 произошли изменения (technet.microsoft.com/en -us / library / dn344918.aspx). Является ли данный пользователь членом группы «Защищенные пользователи», указанной в описании изменения?   -  person Kevin    schedule 06.01.2014
comment
Это выглядело многообещающе, однако наш DC - 2008 R2, и в нашей AD нет группы безопасности под названием Protected Users ... Так что, естественно, моей учетной записи нет в нем.   -  person Tom Beech    schedule 06.01.2014
comment
Можете ли вы создать небольшое приложение для самостоятельного размещения службы, а не IIS, и посмотреть, работает ли оно?   -  person Kevin    schedule 06.01.2014
comment
Только что сделал это, создал базовую сервисную библиотеку WCF, используя шаблон, но добавив дайджест-аутентификацию. Запустил службу и клиент в одном окне с Windows 8.1, я получил ТОЧНО такое же исключение.   -  person Tom Beech    schedule 06.01.2014
comment
Можете ли вы подтвердить с помощью Fiddler, что 401 Unauthorized - это не проблема, а ответ на нее? Предоставляет ли трассировка WCF дополнительную информацию?   -  person Kevin    schedule 06.01.2014
comment
Спасибо за ответы ... Я посмотрю со скрипачом. Но боюсь, я новичок в трассировке WCF. Не могли бы вы дать мне указатель? Спасибо   -  person Tom Beech    schedule 06.01.2014
comment
Просто сбежал скрипач. Когда я запускаю подключающееся клиентское приложение, HTTP-соединение отсутствует. Единственное сообщение - это telemetry.microsoft.com, который, как я могу предположить, является сборщиком данных при возникновении исключений. Похоже, что исключение создается локально до того, как произойдет какое-либо взаимодействие. Кажется, ошибка вводит в заблуждение :: System.Net.WebException: удаленный сервер возвратил ошибку: (401) Unauthorized. --- ›System.ComponentModel.Win32Exception: учетные данные недоступны в пакете безопасности в System.Net.SSPIWrapper.AcquireDefaultCredential (SSPIInterface s, String p, CredentialUse i)   -  person Tom Beech    schedule 06.01.2014
comment
позвольте нам продолжить это обсуждение в чате   -  person Kevin    schedule 06.01.2014
comment
Такая же проблема: stackoverflow.com/questions/24060953/   -  person Luuk    schedule 06.06.2014


Ответы (1)


Проблема в том, что Microsoft повысила безопасность LSAS в 8.1 / 2012 R2. BasicHttpBinding больше не поддерживается для отправки идентификационной информации пользователей по сети. Вместо этого вы должны использовать WSHttpBinding.

Это решило мою проблему

person Tom Beech    schedule 22.01.2014