Олицетворение ASP.NET ролью - PullRequest
       33

Олицетворение ASP.NET ролью

1 голос
/ 07 сентября 2010

Я изменил элемент управления входом в ASP.NET, чтобы также разрешить указание UserRole («Сотрудник» или «Волонтер»).Аутентификация пользователей осуществляется посредством вызова веб-службы, написанного нашим клиентом, который принимает имя пользователя / пароль / роль и возвращает значение true или false.

  • Если роль «Сотрудник», она представляет пользователя активного каталога.Приложение должно выдавать себя за пользователя с указанным именем пользователя / паролем.
  • Если роль - «Доброволец», приложение должно работать под установленной учетной записью Windows, имя пользователя / пароль которой заранее известно (т. Е. Жестко запрограммировано в сети.файл конфигурации).

Сервер работает на Windows Server 2003. Я смущен множеством вариантов конфигурации и пытаюсь понять мои варианты;

Возможно ли иметь несколько сценариевкак описано?

Должен ли я указать олицетворение программно или это можно сделать через файл конфигурации?Если да, необходимо ли использовать LogonUser или WindowsIdentity?

Какую настройку файла конфигурации мне следует использовать?(т. е. проверка подлинности с помощью форм, олицетворение = true и т. д.)

Заранее благодарим.

1 Ответ

3 голосов
/ 07 сентября 2010

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

Я использую комбинацию взаимодействия и WindowsIdentity для обработки имитации.Следующие шаги:

  1. Войдите в систему с помощью взаимодействия LogonUserA(), который заполняет дескриптор IntPtr (token).
  2. Дублируйте токен с помощью взаимодействия DuplicateToken().
  3. Создание нового идентификатора Windows, например: var identity = new WindowsIdentity(tokenDuplicate);.
  4. Создание контекста олицетворения с помощью: var context = identity.Impersonate();
  5. Закрытие обоих токенов с помощью взаимодействия CloseHandle()
  6. Когда закончите олицетворение, отмените контекст олицетворения с помощью: context.Undo();

Я держу одноразовый класс для обработки деталей.Шаги 1-5 выполняются в конструкторе, а шаг 6 - в процедуре удаления.Это помогает гарантировать, что я вернусь должным образом даже при возникновении исключения.

При таком подходе, поскольку вы передаете учетные данные с помощью метода службы, схема аутентификации web.config не является полностью принудительной.Однако, если вы используете встроенную аутентификацию Windows, вы можете программно олицетворять текущего пользователя с помощью HttpContext.Current.User.Identity.Impersonate (), не передавая учетные данные в методе службы.

На стороне ивы, возможно, уже знаете, PInvoke.net является ценным ресурсом для настройки подписей для методов взаимодействия.

...