Как я могу использовать свою собственную базу данных с SimpleMembership и WebSecurity? Что такое MVC4 безопасность все о?
Я прочитал все, что мог найти по этой теме, включая статьи MSDN и так далее, но я все еще очень растерян и смущен.
вопросы
пожалуйста, ответьте на следующие вопросы (кратко, если возможно):
Что это SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) и за что это / они отвечают?
Что это безопасные переводы в интернете (WebMatrix.WebData)?
Что такое членство (
1 ответ:
см. резюме ниже каждой цитаты для быстрого ответа, а также параграфы для деталей. Также смотрите раздел ссылки в конце для авторитетных источников.
аннотации
1.Что такое SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) и за что это / они отвечают?
SimpleMembership (термин, который охватывает как
SimpleMembershipProviderиSimpleRoleProvider) является ответственный за обеспечение чистого и быстрого способа реализации 80 %-там подключи и играй аутентификации и авторизации рамки с безопасным хранением паролей, что любой может использовать.2.Что такое безопасные переводы в интернете (в WebMatrix.WebData)?
WebSecurityэто вспомогательный класс для общих задач членства, который работает вместе сMembershipиOAuthWebSecurity. Роли по-прежнему доступны отдельноRoles.3.Что такое членство (система.Сеть.Безопасность) класс?
Membershipявляется статическим классом из оригинала ASP.NET реализация членства, которая управляет пользовательскими настройками и операциями. Многие операции пользователя по-прежнему выполняются здесь, а не повторять их вWebSecurity. Они оба используют один и тот же поставщик по вашему выбору.4.Почему MVC4 создает таблицу UserProfile и a таблица webpages_Membership? Для чего они нужны и в чем разница? Что такое класс UserProfile, который создает MVC4?
две таблицы выполняют различные функции. Элемент
webpages_Membershipсхема управляется платформой и используется для учетных данных,UserProfileсхема управляется нами и используется для любых свойств, которые мы хотим сохранить против пользователя.5.Что такое класс UsersContext?
это a
DbContext(часть DbContext API) предоставляется в качестве стартового шаблона интернет-приложения MVC. Ее единственная задача состоит в том, чтобы содержатьUserProfileкласс, чтобы мы могли работать с ним (например, черезInitializeSimpleMembershipAttribute).6.Как все это работает вместе, чтобы сделать аутентификацию пользователя?
теперь это должно быть очевидно из резюме выше и подробно ниже. Использование:
WebSecurityдля общих задач;UserProfileпользовательские свойства для хранения против пользователя, доступ черезUsersContext(в шаблоне Visual Studio "MVC Internet Application");Membership, когдаWebSecurityилиOAuthWebSecurityне имеет метода; иRolesдля ролей. Используйте контроллер шаблона VS, чтобы увидеть примеры использования.Edit. На случай, если кто-то забрался так далеко
Предположим, у меня есть существующая база данных ...
если у вас есть существующая база данных, и ваша единственная причина для написания пользовательский поставщик членства должен иметь дело с вашим устаревшим методом хранения паролей, тогда вы можете использовать обходной путь. Это будет работать только в том случае, если вы можете перейти от старого хранилища паролей к алгоритму SimpleMembership (который использует
Rfc2898DeriveBytesкласс). Подробности см. в сноске.если вы не можете отойти, то да вам придется создать свой собственный провайдер, чтобы использовать свой конкретный алгоритм пароля, который вы можете сделать извлечение из
SimpleMembershipProvider.Примечание:
SimpleMembershipProviderбудет хэш ваши пароли не шифровать их. Если вы не знаете разницы и почему это важно, то подумайте дважды, прежде чем делать свой собственный поставщик с пользовательской безопасностью
деталь
1.Что такое SimpleMembership / SimpleMembershipProvider
чтобы понять, как все это сочетается, это помогает понять историю.
- ASP.NET в 2005 году представил ASP.NET система членства
- эта система использовала поставщиков для абстрагирования деталей реализации от общих интерфейсов, используемых для управления учетными записями и ролями и т. д.
- он также дал нам базовую возможность " Профиль пользователя "(хранится в одном столбце xml-поле, которое люди поэтому старались избегать)
- SimpleMembership был выпущен в мир в 2010 году ish в качестве поставщика это подключается к сети ASP.NET система членства, но также допускает аутентификацию OAuth и хранение профилей пользователей по свойствам на столбец (вместо хранения одного столбца, используемого в исходной реализации).
SimpleMembershipProviderосуществляетExtendedMembershipProviderдля расширения реализации исходного поставщикаэто с открытым исходным кодом на codeplex (зеркальная на github). Насколько безопасность идет, вы можете поэтому оценить код самостоятельно, клонировать его, изменить его и т. д. Вы должны взять свой собственный вид на преимущества и недостатки на безопасность с открытым исходным кодом, и приготовить это с щепоткой низ. (личное мнение: я использую его иногда, я не использую его в другой раз)
ExtendedMembershipProviderсам по себе добавляет команды типаGeneratePasswordResetTokenк старым API поставщика членства.2.Что такое безопасные переводы в интернете (WebMatrix.WebData)?
WebSecurity- это просто фасад, или вспомогательный класс, чтобы обеспечить простой доступ кSimpleMembershipProviderи сделать общие задачи легко и доступно в одном месте. Он есть как для помощи, так и потому, что расширение исходной структуры черезExtendedMembershipProviderозначает некоторые из исходных классов, таких какMembershipне хватает сейчас. Примеры:
WebSecurity.CurrentUserName- возвращает имя текущего вошедшего вWebSecurity.CreateUserAndAccount. Одновременно создайте пользователя и установите свойства профиля пользователя (например,WebSecurity.CreateUserAndAccount(userName, pw, new { Email = model.Email });WebSecurity.InitializeDatabaseConnection- Быстрая настройка новой / существующей базы данных для использования с членством, выберите столбец идентификатора пользователя и идентификатор естественного ключа пользователя и т. д.ResetPasswordчтобы сбросить пароль пользователя,GeneratePasswordResetTokenи многое другоеэти методы обычно откладывают к провайдеру вы находитесь используя, они не просто зависят от SimpleMembership, и они связывают вместе такие объекты, как ваш провайдер и
Membershipчтобы обеспечить общую точку для выполнения функций членства.обратите внимание, что есть также
OAuthWebSecurityчто эквивалентноWebSecurityдля аутентификации OAuth.3.Что такое членство (система.Сеть.Безопасность) класс?
Membershipиз исходной реализации; он управляет пользовательскими настройками и выполняет связанные с пользователем операции с использованием базовогоMembershipProviderреализация которогоExtendedMembershipProviderтеперь расширяется. Это статический класс, поэтому он доступен везде, где вы объявляете пространство имен, и поэтому является простым способом, например, получить текущего пользователя:Membership.GetUserесть путаница, вызванная тем, что
WebSecurityделает некоторые вещи, а не другие, иMembershipделает некоторые вещи, а не другие. Если вы смотритеWebSecurityкак инструментарий для операций более высокого уровня, иMembershipв качестве инструментария, чтобы сделать вещи для a пользователь, вы будете в порядке; они работают вместе с вашим провайдером.4.Почему MVC4 создает таблицу UserProfile и таблицу webpages_Membership? Для чего они нужны и в чем разница? Что такое класс UserProfile, который создает MVC4?
webpages_Membershipэто таблица с фиксированной схемой, которую мы оставляем в покое, и позволяет поставщику выполнять основные операции с учетной записью, в основном сохраняя учетные данные.UserProfileэто таблица, которую мы настраиваем для хранения информация против учетной записи пользователя, и это стало доступным в строго типизированном формате черезUserProfileкласса.- есть дополнительная таблица под названием
webpages_OAuthMembershipкоторый делает ту же работу, что иwebpages_Membership, но для провайдеров входа OAuth, с которыми вы хотите интегрироваться.магия этой настройки заключается в том, что один пользователь может иметь членство войти на свой собственный сайт, и любое количество OAuth Логинов с различными поставщиками, как google, facebook, и все они поделитесь общим профилем, хранящимся в
UserProfileкак правило, если таблица начинается с
webpages_, это означает, что есть API для доступа к нему. ЭлементUserProfileтаблица представленаUserProfileкласса вUsersContext(если вы используете шаблон интернет-приложения MVC по умолчанию). Поэтому мы получаем доступ к этому через обычные методы, которые мы будем использовать с любым классом, содержащимся в ADbContext.
UserProfileочень код-первый дружественный: вы можете добавить столбцы (например, пользовательUserProfileтаблица не должна называться так - вы можете изменить это с помощьюWebSecurity.InitializeDatabaseConnectionвызов[Table("UserProfile")] public class UserProfile, и ваши собственные миграции.5.Что такое класс UsersContext?
это из шаблона интернет-приложения MVC, предоставленного в новом проекте Visual Studio. Первое, что я делаю, это убедиться, что он разделяет общую связь строка с моим собственным контекстом базы данных (при условии, что таблицы членства находятся в одной базе данных). Вы можете изменить это и отделить их позже, если хотите.
вам не нужно иметь его отдельно от вашего собственного контекста - это необходимо только в том случае, если вы хотите хранить информацию о членстве в другой базе данных сейчас или в будущем, если вы избавитесь от него, вы можете просто изменить ссылки на
UsersContextк вашему собственному контексту, регулируяDatabase.SetInitializer.ссылки:
используя SimpleMembership с ASP.NET веб-страницы-Мэтью Осборн - Это оригинальная ссылка о SimpleMembership и что это такое, почему это и что он делает:
MSDN-введение в членство - Членство по-прежнему лежит в основе SimpleMembership, поэтому это помогает немного понять об этом.
- исходный код страницы CodePlex (зеркально на github).
WebSecurityOAuthWebSecuritySimpleMembershipProviderExtendedMembershipProviderSimpleRoleProviderMembershipRolesDbContextи DbContext API
EDIT сноска: деталь для выполнения скользящего обновления пароля
- добавить свойство к
UserProfileв котором хранится версия пароля учетной записи (например, 1 для legacy, 2 для SimpleMembership)- в действии "вход" напишите код так, чтобы:
- если они находятся на вашей версии пароля SimpleMembership, вы делаете обычный логин
- если они находятся на устаревшая версия пароля, вы:
- проверить его, используя свой старый метод
- если это правильно, вы сбросите его с помощью
ResetPasswordзатемChangePasswordчтобы использовать версию SimpleMembership, это обновит поле до новой версии пароля- и, наконец, обновить версию пароля на
UserProfile- обновить любые другие методы AccountsController, которые используют пароль в аналогичном путь.
- живите с хакерским обходным путем и соединением с
webpages_Membershipтаблица мы не должны касаться, как вы не должны были написать новый пользовательский поставщик.можно сделать все это транзакций с
TransactionScope. Единственная неприятная вещь происходит это дополнительный код в контроллере, и соединение сwebpages_Membership.
Comments