Я думаю, вы можете установить для свойства NegotiateServiceCredential значение True, чтобы ваша привязка использовала SPNego вместо хладнокровного Kerberos . Если задано значение true, клиенту не нужно указывать имя участника-службы, и он может подключаться к серверу, на котором установлена учетная запись, не принадлежащая машине.
Обратите внимание, что, поскольку клиент больше не запрашивает конкретное имя участника-службы, он больше не может обнаружить, подключен ли к нему угнанный имитатор службы, но обычно это незначительная проблема, если вы действительно не параноидально относитесь к безопасности.
Кроме того, в качестве дополнительной информации: тот факт, что WCF запрашивает в качестве имени участника-службы имя учетной записи, по сути, является интеллектуальным пердением. Клиент должен использовать API DsMakeSpn для создания имени участника-службы из имени службы, хоста и порта. Сервер должен зарегистрировать это имя участника-службы для своего имени при запуске или позволить администратору сделать это с помощью setspn.exe . Именно так они делают все традиционные (с хорошим поведением) сервисы в среде Kerberos / ActiveDirecotry / Windows.
Обновление
Во-вторых, хотя я не вижу ничего, указывающего, что клиент должен использовать имя учетной записи в качестве имени участника-службы. Похоже на недосмотр документации, вместо того, чтобы документировать их надлежащим образом, они просто рекомендовали то, что в принципе является плохой практикой Или, может быть, просто совет на форуме плох, так как я не копался, чтобы посмотреть, что спецификация привязки MSDN говорит об использовании SPN ...
У меня нет удобной среды для тестирования WCF, но, возможно, вы можете настроить клиенты для запросов правильного имени участника-службы, например YourService/server:port
, и вы также зарегистрируете такое же имя участника-службы на стороне сервера. Либо вручную, как упражнение, оставленное администраторам, либо автоматически из вашего сервиса, когда он запускается, и отмените регистрацию при завершении работы. правильный способ сделать это - позволить администраторам сделать это, но на самом деле это такая боль, что большинство служб регистрируют SPN самостоятельно, и вы, вероятно, тоже можете следовать этой практике. Чтобы зарегистрировать имя участника-службы, ваша служба вызывает DsWriteAccountSpn . Запись должна распространяться в AD и реплицироваться между серверами AD, и это как минимум одна из причин, по которой использование службы автоматической регистрации / автоматической отмены регистрации SPN является сомнительной практикой.
Если вы хотите узнать больше о мире чудесных имен SPN и о том, как они могут разрушить ваш день, вы можете прочитать о Как работают публикации и имена участников службы .
Обновление
Я почти уверен, что вы можете использовать любой SPN, какой захотите. Большинство примеров используют имя учетной записи как «UPN» (имя участника-пользователя) вместо SPN, но это только для удобства примеров, поскольку использование истинного SPN может привести к административным проблемам при настройке SPN под учетной записью пользователя (опять же). зачем админам это делать ...). С Переопределение идентификатора службы для аутентификации , соответствующее выделено:
По умолчанию, когда служба
настроен на использование Windows
учетные данные, элемент, который
содержит <userPrincipalName>
или
<servicePrincipalName>
элемент
генерируется в WSDL. Если служба
работает под локальной системой,
LocalService или NetworkService
учетная запись, имя участника службы
(SPN) генерируется по умолчанию в
форма host/<hostname>
потому что те
учетные записи имеют доступ к компьютеру
Данные SPN. Если служба работает
под другой учетной записью Windows
Фонд связи (WCF)
генерирует UPN в форме
<username>@<domainName>
. Это происходит
потому что аутентификация Kerberos
требует предоставления UPN или SPN
клиенту для проверки подлинности
сервис.
Вы также можете использовать инструмент Setspn.exe
зарегистрировать дополнительный SPN с
учетная запись службы в домене. Вы можете
затем использовать SPN в качестве личности
услуга . Чтобы загрузить инструмент, см.
Windows 2000 Resource Kit Tool:
Setspn.exe. Для получения дополнительной информации о
инструмент, см. обзор Setspn.