Олицетворение с IIS7, WCF Rest, пользовательский модуль аутентификации - PullRequest
0 голосов
/ 04 ноября 2011

Итак, я работаю над настройкой службы WCF, размещенной в iis7. Услуга является услугой ОТДЫХА.

До сих пор наши требования к аутентификации заключались в том, что только доменные учетные записи собирались подключиться к сервису. Мы используем базовую аутентификацию и используем олицетворение для вызовов через наш бизнес-уровень в нашу БД.

Это все работает хорошо.

Теперь нам нужно разрешить не доменным учетным записям использовать наш сервис. Из-за чего-то с IIS я реализовал это (http://custombasicauth.codeplex.com/) и пользовательский поставщик членства, который будет (в зависимости от переданного имени пользователя) либо пытаться выполнить аутентификацию в Active Directory, либо в отношении поставщика членства asp.net. Эта часть работает правильно.

Теперь у меня проблема в том, что олицетворение не работает (что понятно). Теперь я заблудился, и мне нужна помощь с направлением или устранением всего тумана. Что я хочу сделать (и я не знаю, возможно ли это) это:

ЕСЛИ пользователь является пользователем домена, ТОЛЬКО имитировать свою учетную запись. ЕСЛИ НЕ пользователь домена, ТОГДА выдавать себя за «общую учетную запись пользователя домена». В качестве бонуса я бы хотел, чтобы это произошло «за сценой», чтобы каждый наш метод не нуждался в специальной логике для этого.

Я прочитал кучу материала о личностях, провайдерах политик, ролевых провайдерах ... и теперь я полностью сбит с толку.

У кого-нибудь есть понимание этого?

1 Ответ

0 голосов
/ 16 ноября 2011

Поэтому, после долгих поисков в Интернете дополнительной информации о работе с персонализацией в IIS, я не смог найти много полезной информации.Поэтому я стал больше разбираться в «хакерстве».

Я использовал это (http://custombasicauth.codeplex.com/), чтобы позволить нам иметь пользовательскую базовую аутентификацию с WCF.

как этот модуль протекает LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule.OnEnter ()
вызывается при установлении соединения. Это, в свою очередь, вызывает LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthentication* LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule.SetPrincipal (строка имя пользователя)

Я изменил SetPrincipal для принятия пароля также * частный статический void SetPrincipal (имя пользователя строки, пароль строки)

Здесь я делаю простой переход по имени пользователя (проверяя префикс нашего домена), чтобы определить, является ли пользователь учетной записью домена. Если это учетная запись домена, я использую его имя пользователя / пароль для создания WindowsIdentity (я использовал http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx с небольшим переФакторинг, чтобы получить только WindowsIdentity ).Если пользователь не был учетной записью домена, я использую для него известную учетную запись домена.Затем я беру это WindowsIdentity и создаю WindowsPrincipal , и я устанавливаю это HttpContext.Current.User

Так что это работает для нас.Олицетворение работает.Как побочный эффект этого нам не нужно украшать наши методы WCF с атрибутом [OperationBehavior (Impersonation = ImpersonationOption.Required)] * ​​1034 *.Я не знаю, если это «правильный» способ сделать это, но я думаю, что это довольно близко.Я думаю, что IIS обнаруживает наличие WindowsPrincipal в Current User и автоматически олицетворяет эту учетную запись.

...