Ответ 1
a IPrincipal
- это контекст безопасности, который создается для каждого веб-запроса и содержит информацию, связанную с идентификацией пользователя и ролей, которые они имеют.
a 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
class GetUser()
будет использовать текущий IIdentity.Name
и настроенный MembershipProvider
, чтобы вернуть экземпляр MembershipUser
(или производного класса, если вы его определили), содержащий данные о пользователе.
Так как ASP.NET MVC построен поверх конвейера обработки ASP.NET, то место, где вы хотите установить свои собственные IIdentity
и IPrincipal
, будет таким же. Насколько я знаю, в архитектуре MVC нет лучшего места для их установки.
Примечание: все это из памяти. Если у меня что-то не так, сообщите мне, и я уточню.