an IPrincipal
- это контекст безопасности, который создается для каждого веб-запроса и содержит информацию, связанную с идентификацией пользователя и ролями, которые у него есть.
и IPrincipal
содержит IIdentity
, который имеет свойства Name
, IsAuthenticated
и AuthenticationType
.
пользовательский MembershipProvider
- это класс, производный от абстрактного класса MembershipProvider
предоставить пользовательские данные о пользователях, которые используют ваше приложение.Поставщик будет работать с типами MembershipUser
и может использоваться для получения данных для конкретного пользователя или пользователей, создания новых пользователей и т. Д. Вы можете наследовать от MembershipUser
, чтобы создать собственный тип пользователя, и можетеКак правило, это требуется при использовании собственного провайдера.
При доступе к приложению создаются IPrincipal
и IIdentity
, которым назначаются HttpContext.Current.User
и Thread.CurrentPrincipal
для предоставления информации о безопасности для любых действий, которые могут быть предприняты в течение срока действия запроса.
Если вы используете RoleProvider
, то RolePrincipal
создается экземпляр типа, который подключается к сконфигурированному RoleProvider
, чтобы получить роли для пользователя;если вы не используете RoleProvider
, то создается экземпляр типа GenericPrincipal
.
Если вы используете проверку подлинности с помощью форм и пользователь вошел в систему, тогда FormsIdentity
экземпляр типа создан;если пользователь не аутентифицирован, то создается экземпляр типа GenericIdentity
.Созданный IIdentity
- это то, что в конечном итоге будет сериализовано в файл cookie аутентификации, переданный обратно в браузер, и то, что будет использовано для создания FormsAuthenticationTicket
и IIdentity
в следующем запросе.
MembershipProvider
подходит для этого, предоставляя дополнительную информацию о пользователе.статический метод Membership
класса GetUser()
будет использовать текущий IIdentity.Name
и настроенный MembershipProvider
для возврата экземпляра MembershipUser
(или производного класса, если вы 'мы определили один), содержащий данные о пользователе.
Поскольку ASP.NET MVC построен поверх конвейера обработки ASP.NET, то место, где вы хотели бы установить свои собственные IIdentity
и IPrincipal
та же.Насколько я знаю, в архитектуре MVC нет лучшего места для их установки.
Примечание: все это из памяти.Если у меня что-то не так, пожалуйста, дайте мне знать, и я обновлю.