Как аутентифицировать пользователя между ASP.NET и WCF? - PullRequest
5 голосов
/ 19 февраля 2010

Мы разрабатываем браузерное интранет-приложение. Все пользователи имеют активную учетную запись каталога, поэтому очевидным выбором будет использование встроенной аутентификации 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?

Спасибо, Ash.

Ответы [ 4 ]

3 голосов
/ 20 февраля 2010

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

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

1 голос
/ 11 мая 2010

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

1 голос
/ 11 мая 2010

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

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

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

0 голосов
/ 19 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...