WCF и <identity impersonate = "true" /> - PullRequest
1 голос
/ 01 сентября 2009

В чем разница между этими двумя строками кода web.config
1.

<identity impersonate="true" /> 

2

<identity impersonate="true" userName="MyUserName" password="MyPassword"/>  

Где MyuserName и MyPassword - мои учетные данные Windows. Если у вас есть настройки IIS для использования учетных данных Windows, не должно "1." передать мои учетные данные Windows и, следовательно, быть таким же, как "2."?

Мое приложение умирает, когда я использую «1» с ошибкой аутентификации при попытке подключиться к моей службе WCF. Очевидно, в коде моей службы нет ничего плохого, и код, который называет мою службу как «2», прекрасно работает и передает учетные данные клиента моей службе WCF.

конфигурация IIS для веб-сайта настроена для проверки подлинности Windows, а пользователь, под которым он работает, является доверенным для делегирования.

Так, как я могу передать свои учетные данные Windows без жесткого кодирования их?

Ответы [ 2 ]

6 голосов
/ 21 сентября 2009

То, что вы видите, является проблемой с делегированием. Если вы используете

<identity impersonate="true" />

что произойдет, если ваши страницы ASP.NET будут работать с учетными данными пользователя, вошедшего в систему (при условии проверки подлинности Windows). Однако эти учетные данные не передаются ни на какие вызовы, сделанные вне вашего приложения, такие как подключение к SQL или подключение к службе WCF. Вам нужно использовать учетные данные, переданные в ASP.NET, а затем использовать олицетворение перед вызовом веб-службы;

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
    WCFTestService.ServiceClient myService = new WCFTestService.ServiceClient();
    Response.Write(myService.GetData(123) + "<br/>");
    myService.Close();
}

Более подробная информация о шаблонах и практиках безопасности WCF .

5 голосов
/ 01 сентября 2009

Если вы прочитаете страницу MSDN о олицетворении удостоверения ASP.NET , вы заметите, что если элемент <identity> не содержит учетные данные, ASP.NET будет олицетворять токен, переданный ему IIS , который может быть либо идентификатором аутентифицированного пользователя запроса, либо анонимной учетной записью интернет-пользователя (IUSR_machinename). Мне кажется, что в сценарии 1. выше ASP.NET получает токен анонимного пользователя, который объяснил бы ошибку. Вы можете попробовать отключить анонимный доступ к вашему веб-сервису, чтобы включить аутентификацию Windows.

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