Аутентификация по формам через проверку подлинности Windows - PullRequest
3 голосов
/ 25 августа 2009

У меня есть веб-сайт, над которым я работаю, который имеет как интранет, так и интернет-развертывание. Единственная разница между этими двумя параметрами заключается в паре настроек конфигурации.

Интернет-версия работает нормально, так как она использует только аутентификацию форм (которая определена в его веб-конфигурации), и если пользователь не вошел в систему, он перенаправляется на страницу входа.

Версия для интрасети немного сложнее ... когда пользователь впервые заходит на сайт, объект принципа контекста http устанавливается правильно с WindowsPrincipal, но, используя эту информацию, я подтверждаю, что пользователю разрешен доступ к приложению, а затем я создать свой собственный экземпляр IPrinciple.

Учитывая это, я хочу сделать пару вещей здесь ... Я хочу использовать объект WindowsPrincipal в качестве основы для аутентификации пользователя, но затем с этого момента использовать аутентификацию с помощью форм (т. Е. Использовать куки-файл для хранения детали аутентификации и т. д.). Мне также нужен экземпляр принципа, который я извлекаю из контекста HTTP, для моего типа IPrinciple.

Как мне лучше поступить так? Как и в случае, я должен обратиться к Session_Start global.asax для выполнения логики аутентификации и затем каким-то образом заставить его хранить мой собственный принцип IP (таким образом, для любого запроса после этого момента экземпляр является моим собственным принципом) или я лучше всего что-то делаю с Application_AuthenticateRequest .

Приветствие Энтони

1 Ответ

2 голосов
/ 25 августа 2009

Избегайте объекта сеанса для этого. Application_AuthenticateRequest - это то место, где вы хотите быть. Там вы можете взять WindowsPrincipal, а затем перейти к базе данных, чтобы заполнить свой собственный объект, реализующий IPrincipal. Это означает, что Application_AuthenticateRequest часто вызывается, поэтому в моих приложениях я, как правило, кэширую данные ролей в течение как минимум нескольких секунд, чтобы сократить количество обращений к базе данных. Это также работает с проверкой подлинности с помощью форм. Единственное различие между этими двумя методами заключается в том, что в сценарии Forms вы получаете GenericPrincipal из модуля проверки подлинности Forms, и вы будете использовать его для извлечения собственного пользовательского основного объекта вместо WindowsPrincipal.

Еще одним результатом установки HttpContext.Current.User в Application_AuthenticateRequest является то, что, в отличие от того, что вы помещаете своего принципала в объект Session, вы можете использовать декларативную безопасность, например, декорирование ваших методов с PrincipalPermissionAttribute.

...