Олицетворение / аутентификация WCF

#c# #wcf

#c# #wcf

Вопрос:

Я просмотрел примеры олицетворения, но у меня все еще возникает проблема.

Некоторые детали структуры:

ASP.net : Проверка подлинности Windows
WCF: размещен в IIS, в настоящее время работает с использованием разрешения анонимному пользователю

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

При использовании ASP.net приложение, если компьютер вошел в систему как администратор, но произошел сбой в Active Directory, поскольку он не является определенным пользователем в AD, во всплывающем окне браузера будет запрошен идентификатор пользователя и пароль.

При появлении запроса пользователь введет правильный идентификатор пользователя и пароль, соответствующие объявлению. Следовательно, вход в систему пройден.
Но когда я передал учетные данные для проверки подлинности window в WCF, используя олицетворение WCF, он показывает меня как администратора вместо ASP.net информация об аутентифицированном пользователе.

Что я должен сделать, чтобы получить правильный ASP.net информация об аутентифицированном пользователе вместо того, какой пользователь входит в систему в Windows.

Ответ №1:

В вашем ASP.Сетевое приложение, которое вы должны установить <identity impersonate="true"/> в своем web.config.

Тогда вам пришлось бы добавить олицетворение к вашему вызову службы WCF с помощью чего-то подобного внутри ASP.Сетевое приложение:

 using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
    WebClient client = new WebClient
       {
        Credentials = CredentialCache.DefaultNetworkCredentials
       };
    string result = client.DownloadString("http://someserver");
}
  

Также ознакомьтесь с patterns amp; practices: Руководство по безопасности WCF для получения пошагового руководства о том, как добавить олицетворение в вызовы WCF из веб-приложения.

Комментарии:

1. проголосовал за вас, поскольку, по крайней мере, это отличается от того, что я видел до сих пор. Не смогу протестировать, по крайней мере, до завтра. Итак, для подтверждения идентификатор impersonate = true должен быть добавлен в ASP, а не в WCF? Но я однажды попробовал ASP, у меня ничего не получилось. То, что я сделал, было использованием operationalContext. Так можно объяснить, насколько это отличается от вашего?

2. Вам нужно включить аутентификацию Windows в веб-приложении и использовать impersonate = true. Это позволит вам олицетворять вызов службы wvf из asp.net сайт. Возможно, вам также придется убедиться, что вы используете kerberos в своем домене, а не только NTLM.

3. Веб-приложение wise определенно включило аутентификацию Windows. Хорошо, я попробую, может быть, сегодня вечером, если у меня будет время

4. Спасибо, это помогло для этой части вопроса, который я задаю. Но я заметил, что пользователь, не прошедший проверку подлинности, также может вызвать службу WCF, если я передам учетные данные = CredentialCache. Учетные данные по умолчанию. В любом случае, чтобы предотвратить это? WCF уже настроен на аутентификацию в окне запретить анонимность

5. Из документов: «Учетные данные, возвращаемые DefaultNetworkCredentials, представляют учетные данные аутентификации для текущего контекста безопасности, в котором запущено приложение. Для клиентского приложения обычно это учетные данные Windows (имя пользователя, пароль и домен) пользователя, запускающего приложение. Для ASP.NET в приложениях сетевыми учетными данными по умолчанию являются учетные данные пользователя, вошедшего в систему, или пользователя, за которого выдают себя.» Есть ли у вас форма входа в систему / Windows в вашем веб-приложении и олицетворение?