У меня есть клиент, подключающийся к службе WCF с использованием следующего на обеих конечных точках:
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
Это работает в моей среде разработки (обе работают локально), и согласование работает правильно. Когда я отправляю его в тестовую среду, я получаю следующее сообщение:
согласование безопасности SOAP с 'http://host/service' для цели
'http://host/service' не удалось. См. Внутреннее исключение для получения более подробной информации.
Внутреннее исключение:
System.ComponentModel.Win32Exception: поставщик поддержки безопасности
Ошибка аутентификации интерфейса (SSPI). Сервер может не работать
в учетной записи с идентификатором ' host / server-name.domain '. Если
сервер работает в учетной записи службы (например, Network Service),
укажите имя учетной записи ServicePrincipalName в качестве идентификатора в
EndpointAddress для сервера. Если сервер запущен у пользователя
учетной записи, укажите UserPrincipalName учетной записи в качестве идентификатора в
конечный адрес для сервера.
После случайного изменения атрибутов и, как правило, возни, единственный способ заставить его работать - это изменить пул приложений, чтобы служба использовала LocalSystem в качестве идентификатора. Впоследствии это привело к тому, что у системных администраторов появились котята, и я больше не могу этим заниматься.
Может ли кто-нибудь пролить свет на то, почему это происходит? Как учетная запись Windows клиента, так и личность AppPool находятся в одном домене. Служба работает на сервере в том же домене.