Как я могу использовать свою собственную базу данных с SimpleMembership и WebSecurity? Что такое MVC4 безопасность все о?



Я прочитал все, что мог найти по этой теме, включая статьи MSDN и так далее, но я все еще очень растерян и смущен.



вопросы



пожалуйста, ответьте на следующие вопросы (кратко, если возможно):




  1. Что это SimpleMembership/SimpleMembershipProvider (WebMatrix.WebData) и за что это / они отвечают?


  2. Что это безопасные переводы в интернете (WebMatrix.WebData)?


  3. Что такое членство (


621   1  

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 по умолчанию). Поэтому мы получаем доступ к этому через обычные методы, которые мы будем использовать с любым классом, содержащимся в A DbContext.

UserProfile очень код-первый дружественный: вы можете добавить столбцы (например, пользователь Email адрес), а затем настройте миграцию, чтобы включить этот столбец в свою базу данных в следующем выпуске (если вам нравится использовать миграции). На самом деле,UserProfile таблица не должна называться так - вы можете изменить это с помощью WebSecurity.InitializeDatabaseConnection вызов [Table("UserProfile")] public class UserProfile, и ваши собственные миграции.

5.Что такое класс UsersContext?

это из шаблона интернет-приложения MVC, предоставленного в новом проекте Visual Studio. Первое, что я делаю, это убедиться, что он разделяет общую связь строка с моим собственным контекстом базы данных (при условии, что таблицы членства находятся в одной базе данных). Вы можете изменить это и отделить их позже, если хотите.

вам не нужно иметь его отдельно от вашего собственного контекста - это необходимо только в том случае, если вы хотите хранить информацию о членстве в другой базе данных сейчас или в будущем, если вы избавитесь от него, вы можете просто изменить ссылки на UsersContext к вашему собственному контексту, регулируя Database.SetInitializer.

ссылки:

используя SimpleMembership с ASP.NET веб-страницы-Мэтью Осборн - Это оригинальная ссылка о SimpleMembership и что это такое, почему это и что он делает:

MSDN-введение в членство - Членство по-прежнему лежит в основе SimpleMembership, поэтому это помогает немного понять об этом.


EDIT сноска: деталь для выполнения скользящего обновления пароля

  • добавить свойство к UserProfile в котором хранится версия пароля учетной записи (например, 1 для legacy, 2 для SimpleMembership)
  • в действии "вход" напишите код так, чтобы:
    • если они находятся на вашей версии пароля SimpleMembership, вы делаете обычный логин
    • если они находятся на устаревшая версия пароля, вы:
      • проверить его, используя свой старый метод
      • если это правильно, вы сбросите его с помощью ResetPassword затем ChangePassword чтобы использовать версию SimpleMembership, это обновит поле до новой версии пароля
      • и, наконец, обновить версию пароля на UserProfile
  • обновить любые другие методы AccountsController, которые используют пароль в аналогичном путь.
  • живите с хакерским обходным путем и соединением с webpages_Membership таблица мы не должны касаться, как вы не должны были написать новый пользовательский поставщик.

можно сделать все это транзакций с TransactionScope. Единственная неприятная вещь происходит это дополнительный код в контроллере, и соединение с webpages_Membership.

Comments

    Ничего не найдено.