Требуется ли для этого делегирование Windows для учетной записи службы сервера? - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть клиентское консольное приложение, которое имеет некоторые учетные данные пользователя - домен \ пользователь и простой текстовый пароль. Клиентское приложение получает объект windowsidentity для этого пользователя, вызывая Win32 API LogonUser (dwLogonType: LOGON32_LOGON_NETWORK). Я использую windowsidentity для олицетворения и вызова службы WCF (размещенной на другой машине). Служба WCF настроена на использование протокола TCP с интегрированной безопасностью Windows. Вызов завершается с ошибкой SecurityNegotiation с ошибкой: удаленный сервер не удовлетворяет требованию взаимной аутентификации.

Мое предположение здесь заключается в том, что сервер видит идентификацию анонимного клиента, которую он отклоняет, поскольку конечная точка настроена на использование встроенной аутентификации Windows. Я предполагаю, что учетная запись сервера должна быть установлена ​​для делегирования Windows. Правильно ли мое предположение?

Кроме того,

  1. Правильно ли выбран вариант dwLogonType = LOGON32_LOGON_NETWORK?
  2. Может ли токен, возвращаемый LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK), использоваться для выполнения удаленных вызовов WCF?

1 Ответ

1 голос
/ 06 февраля 2012

Тот, кто подражает, должен иметь право на делегирование, если он хочет получить доступ к сетевым ресурсам под личным именем пользователя. В упомянутом сценарии клиентская учетная запись (под которой работает клиент) должна иметь право делегирования, поскольку она олицетворяет некоторого пользователя и хочет распространить идентификатор пользователя на удаленную службу WCF.

Правильно ли выбран вариант dwLogonType = LOGON32_LOGON_NETWORK?

Нет.

Может ли токен, возвращаемый LogOnUser (dwLogonType = LOGON32_LOGON_NETWORK), использоваться для выполнения удаленных вызовов WCF?

С параметром dwLogonType = LOGON32_LOGON_NETWORK LogonUser возвращает токен, который нельзя использовать для распространения идентификатора пользователя сетевым ресурсам.

Опция dwLogonType = LOGON32_LOGON_NETWORK_CLEARTEXT с LogonUser устранила проблему. С этой опцией LogonUser генерирует токен, который может получать доступ к сетевым ресурсам под именем пользователя.

Я полностью благодарен arx за мое решение. Только с его комментарием я смог решить проблему.

...