Проблема с подключением к службе WCF на сервере - PullRequest
1 голос
/ 07 марта 2009

Я настроил службу WCF на сервере, который находится в своей собственной рабочей группе. Я пытался установить соединение TCP / IP с клиентом, который живет в корпоративном домене. Когда я пытаюсь открыть соединение, я получаю исключение SecurityNegotiationException с сообщением:

"Требование безопасности удаленной стороны не был выполнен во время аутентификация. Попробуйте увеличить Уровень защиты и / или Олицетворение уровня "Внутренний Исключение гласит: «Вход в сеть не удалось "

Поговорив с некоторыми коллегами о проблемах и выполнив некоторые исследования Google, я пришел к выводу, что проблема заключается в том, что клиент пытается войти на сервер, используя мой корпоративный сетевой логин и пароль. Поскольку сервер не является частью корпоративной сети, он не знает о моей корпоративной идентичности, а затем отклоняет попытку входа / подключения. Является ли этот анализ правильным или нет, я понятия не имею.

Результаты Google показывают, что, возможно, решение состоит в том, что мне нужно олицетворять учетную запись пользователя, которая существует на сервере. - Я также наткнулся на эту статью кода проекта, которая демонстрирует олицетворение пользователя. Поскольку единственной учетной записью на сервере является Администратор без пароля, я использовал домен в качестве IP-адреса компьютера как «10.0.0.11», имя пользователя как «Администратор» и пароль как «». http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx?display=Print К сожалению, это не с сообщением:

«Ошибка входа: неизвестное имя пользователя или неверный пароль»

Еще один намек на проблему: если клиент и сервер являются обоими компьютерами в корпоративной сети, проблем с подключением вообще не возникает.

Как я могу устранить ошибку и завершить соединение с сервером? Несмотря на то, что это не лучшая практика, я полностью согласен с удалением любой защиты, поэтому я могу продолжать продвигать этот проект

Ответы [ 2 ]

2 голосов
/ 08 марта 2009

Пока вы не разберетесь в деталях, лучший способ узнать это отключить безопасность. Необходимо создать новую конфигурацию привязки на стороне сервера с режимом безопасности, установленным на «Нет». Назовите это "NoSecurity" для удобства. Эта конфигурация должна иметь тот же тип (wsHttpBinding и т. Д.), Который вы используете в своей конечной точке. Затем установите для свойства bindingConfiguration вашей конечной точки значение «NoSecurity».

Обновите конфигурацию клиента, и вы готовы к работе.

1 голос
/ 07 марта 2009

Я не знаю, как заставить рабочую группу доверять домену, а это значит, что у вас есть несколько вариантов, как мне кажется

  1. Добавьте еще одну конечную точку в службу WCF, которая использует HTTP (конечная точка веб-службы), и используйте ее из домена. Это позволяет обойти проблему безопасности, поскольку вы можете выдать себя за другого здесь или даже настроить конкретного пользователя, который может получить доступ к вкусностям на сервере рабочей группы.

  2. Уничтожение безопасности в службе WCF. мне нужно подумать о том, как это сделать, но в любом случае это не очень хорошая идея.

  3. Создайте домен и получите доверительные отношения.

Проект кода, который вы упомянули, не имеет отношения к олицетворению способом, который непосредственно полезен для WCF, так как аутентификация происходит еще до того, как вы сможете использовать этот код. Я полагаю, вы можете сделать это, но это было бы неприятно. Возможно, есть способ использовать код в конечной точке HTTP, но это уже можно сделать без дополнительных затрат на добавление кода, обходящего безопасность Windows.

...