ASP.Net MVC Членство - PullRequest
       14

ASP.Net MVC Членство

5 голосов
/ 02 декабря 2009

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

  1. Я создаю свою собственную реализацию IPrincipal
  2. Я отправляю учетные данные пользователя для действия входа в систему контроллера безопасности.
  3. Я проверяю учетные данные с помощью класса UserService и назначаю IPrincipal, возвращенный из моего класса UserService, HttpContext.User
  4. Мой WebAuthorizeAttribute, который наследует AuthorizeAttribute, проверяет текущий HttpContext.User.Identity.IsAuthenticated и HttpContext.User.IsInRole, чтобы определить, имеет ли пользователь доступ к действию.

Нормальный поток вещей? Я знаю, что могу унаследовать MembershipProvider, но мне не нужны все функциональные возможности, на самом деле, просто возможность войти в систему с двумя разными ролями.

Ответы [ 2 ]

4 голосов
/ 02 декабря 2009

Вам нужно где-то хранить IPrincipal и восстанавливать его при каждом запросе. Если вы будете использовать FormsAuthentication, это хорошее решение:

Аутентификация с помощью ASP.NET 2.0 Forms - возможность сделать ее индивидуальной, но простой

Вы можете найти другие решения здесь:

Где хранить информацию о зарегистрированном пользователе в ASP.NET MVC с использованием проверки подлинности с помощью форм?

и, вероятно, во многих других вопросах StackOverflow:)

EDIT

О MyBusinessLayerSecurityClass.CreatePrincipal (id, id.Name):

Вы должны прочитать эту страницу:

http://msdn.microsoft.com/en-us/library/aa480476.aspx

Специально это:

The FormsAuthenticationModule класс создает GenericPrincipal объект и сохраняет его в HTTP контекст. GenericPrincipal объект содержит ссылку на FormsIdentity экземпляр, который представляет в настоящее время аутентифицированный пользователь. Вы должны разрешить формы проверки подлинности для управления этими задачи для вас. Если ваши приложения иметь конкретные требования, такие как установка пользователя свойство пользовательского класса, который реализует IPrincipal интерфейс, ваше приложение должно обрабатывать PostAuthenticate событие. PostAuthenticate событие происходит после FormsAuthenticationModule проверил аутентификацию форм печенье и создал GenericPrincipal и * * FormsIdentity тысяча сорок-девять объекты. В этом коде вы можете построить обычай IPrincipal объект это оборачивает FormsIdentity объект, а затем сохранить его в HttpContext. Пользователь свойство.

FormsIdentity управляется автоматически после установки файла cookie аутентификации. Все, что вам нужно сделать, это обернуть это в свой IPrincipal. Все это происходит, когда свойство HttpContext.Current.User не равно нулю (это GenericPrincipal, который вы вскоре замените). Если для HttpContext.Current.User задано значение NULL, ранее не было создано cookie для проверки подлинности, и пользователь не прошел проверку подлинности.

2 голосов
/ 02 декабря 2009

Я считаю, что более типичным является следующее:

  1. Я создаю свою собственную реализацию IPrincipal
  2. Я отправляю учетные данные пользователя для действия входа в систему контроллера безопасности.
  3. Я проверяю учетные данные с помощью класса UserService и создаю файл cookie, содержащий некоторую идентифицирующую информацию для этого пользователя . Обычно используется FormsAuthentication.SetAuthCookie или некоторая комбинация служебных методов этого класса.
  4. В событии Application AuthenticateRequest проверьте cookie и назначьте Context.User. Примечание. Это значение автоматически присваивается Thread.CurrentPrincipal после события AuthenticateRequest. Это однократное присвоение, и после этого эти значения не синхронизируются автоматически.
  5. Мой WebAuthorizeAttribute, который наследует AuthorizeAttribute, проверяет текущий HttpContext.User.Identity.IsAuthenticated и HttpContext.User.IsInRole, чтобы определить, имеет ли пользователь доступ к действию.
...