#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 в вашем веб-приложении и олицетворение?