Как аутентифицировать пользователя между ASP.NET и WCF?

Мы разрабатываем приложение для внутренней сети на основе браузера. У всех пользователей есть учетная запись Active Directory, поэтому очевидным выбором будет использование встроенной проверки подлинности Windows. Но будет несколько пользователей, получающих доступ к одной и той же клиентской машине, поэтому мы решили использовать аутентификацию на основе форм (но аутентифицированных по AD).

В этом сценарии лучший способ аутентификации между моим приложением ASP.NET (IIS) и службами WCF (другой сервер IIS 7). Я не хочу использовать режим совместимости asp.Net или сертификат.

Я думаю создать еще одну учетную запись домена для аутентификации ASP.NET и WCF. Я также передаю информацию о текущем пользователе ASP.NET в WCF в виде информации заголовка. Это правильный способ? Следующий код будет вызывать из ASP.NET для доступа и получения каждого метода службы.

 // Call WCF service from ASP.NET Application using a new domain account for each call.
 proxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";
 ServiceReference.HelloWorldClient proxy = new ServiceReference.HelloWorldClient();
 proxy.ClientCredentials.Windows.ClientCredential.UserName = "new_domain_account";
 proxy.ClientCredentials.Windows.ClientCredential.Password = "password";

Есть ли лучший способ аутентифицировать WCF из ASP.NET?

Спасибо, Эш.


person Ash    schedule 19.02.2010    source источник


Ответы (4)


Нет ничего особенного в аутентификации приложения ASP.NET в службе WCF. Доступны все обычные параметры аутентификации (имя пользователя, X.509, windows).

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

person Yaron Naveh    schedule 20.02.2010

Похоже, это не проблема WCF, а проблема с прозрачной аутентификацией браузера.

Попробуйте отключить встроенную в Windows проверку подлинности в IIS для приложения ASP.NET и переключиться на обычную или дайджест-проверку подлинности. Оба они по-прежнему будут аутентифицироваться в AD, но браузер не будет прозрачно аутентифицировать вошедшего в систему пользователя.

Затем в своем приложении ASP.NET просто используйте олицетворение и передайте все учетные данные, известные IIS, в службу WCF, которую вы вызываете.

person Brad Nabholz    schedule 10.05.2010

Я вообще не знаю ASP.NET, но я кое-что сделал с WCF, и думаю, что вам нужно сделать, это получить "форму входа в систему", чтобы затем олицетворять пользователя в текущем потоке, а затем инициировать соединение WCF. на другой сервер. Взгляните на эту статью о msdn, чтобы получить быстрый обзор некоторых этого исключительно в WCF. Я не знаю, как вы интегрируете это в сторону ASP.NET (как я уже сказал, я ничего не знаю об этой технологии), но концептуально я думаю, что это то, что вам придется делать.

person Kevin Anderson    schedule 10.05.2010

ммм ... если у вас есть AD, и они входят в систему со своими учетными данными, не имеет значения, на какой машине они находятся, просто используйте AD. Ну и что, если они используют одну и ту же машину.

В любом случае у Microsoft есть много информации по этому поводу здесь:

http://wcfsecurity.codeplex.com/wikipage?title=Application%20Scenarios&referringTitle=Home

Проверить это.

person Hogan    schedule 19.02.2010
comment
Настройка службы wcf как встроенная проверка подлинности Windows. Многие пользователи будут иметь доступ к одному клиентскому компьютеру, используя свою учетную запись AD. Они не хотят выходить из окон для доступа к этому приложению. поэтому я настраиваю аутентификацию с помощью формы. Но после того, как они войдут в систему (форма), если они получат доступ к WCF, удостоверение будет исходным пользователем входа в Windows, а не пользователем формы. - person Ash; 19.02.2010
comment
Ах, я думаю, я понимаю, вы не хотите настраивать Kerberos. Если вы настроили Kerberos, вы можете аутентифицироваться с помощью AD в веб-сервисе, при этом пользователю ничего не нужно делать. Или ты об этом лучше говоришь? - person Hogan; 19.02.2010
comment
да, я хочу настроить Kerberos, и я хочу пройти аутентификацию с помощью AD, но каким-либо образом я могу передать аутентифицированного пользователя формы ASP.NET в WCF, чтобы WCF считал его текущим пользователем. (Пользователь AD). В настоящее время WCF выполняет проверку подлинности, но не последнего пользователя формы, а исходного пользователя, входящего в систему Windows. Спасибо за ссылку, но я не нашел на нее правильного ответа. - person Ash; 19.02.2010