Каковы плюсы и минусы, используя членство asp.net? - PullRequest
15 голосов
/ 23 ноября 2010

Я создаю новый веб-сайт, и мой друг предлагает мне использовать членство asp.net для процесса аутентификации (логин, регистрация, восстановление пароля и т. Д.).

Я видел, что всехранится в файле XML.

Я хотел бы знать, каковы плюсы и минусы использования членства вместо того, чтобы создавать что-то с нуля.

Ответы [ 6 ]

29 голосов
/ 29 ноября 2010

Решение для входа в MS состоит из нескольких частей.

Аутентификация - «Кто может получить доступ к вашему сайту»

Аутентификация с помощью форм - Это в основном создает безопасный cookie, который говорит"Я заверен!"на каждый запрос.Без этого пользователям придется заходить на каждую страницу.

  • Плюсы: Это хорошо работает
  • Минусы: нет - используйте

Членство - это способ хранения ваших пользователейи их пароли, и проверить учетные данные пользователя.Есть несколько способов решения этой проблемы:

  1. Использование SqlMembershipProvider - Microsoft предоставляет вам базу данных для безопасного хранения пользователей / паролей и дает вам возможность аутентифицировать учетные данные.
    • Плюсы:
      • Меньше / нет настраиваемого кода для обслуживания.Работает "из коробки"
      • Работает с элементами управления Членства и API
    • Минусы:
      • Вы должны использовать сервер Sql и использовать их базу данныхсхемы.(не проблема IMO)
      • Нет контроля над тем, как изначально генерируются пароли.Они длинные и уродливые
      • Более крутая кривая обучения, когда вы знакомитесь с технологией
  2. Создание собственного MembershipProvider - Вы можете наследовать от MembershipProvider, чтобы настроить, где и как хранить ваши данные.

    • Плюсы:
      • Вы получаете шифрование / дешифрование паролей бесплатно
      • Контроль над тем, где вы храните своих пользователей и как выглядят данные
      • Вы по-прежнему можете использовать элементы управления Членством и API
    • Минусы:
      • Естьреализовать собственное решение для хранения данных
      • Вы должны написать, отладить и поддерживать множество пользовательских кодов
      • Если вы добавляете дополнительную функциональность, вам необходимо привести поставщика, чтобы использовать его
  3. Создание собственной схемы аутентификации

    • Плюсы: полный контроль
    • Минусы:
      • Вы создаете все, но должны все отлаживать / поддерживать.
      • У вас естьe для управления безопасностью учетных данных самостоятельно.
      • Невозможно использовать элементы управления членством (Это не большая потеря, поскольку элементы управления довольно просто копировать)
      • Невозможно использовать API членства

Авторизация - «Что могут делать пользователи?»

Роли - Роли управляют тем, что могут пользователисделать через механизм авторизации , предоставляемый web.config , а также работает с усечением безопасности на карте сайта.

  1. Использование SqlRoleProvider - Microsoftпредоставляет базу данных для хранения ролей

    • Плюсы:
      • Работает с web.config
      • Вы можете назначить более одной роли пользователю
    • Минусы:
      • Роли - это просто строки, поддержка «иерархии разрешений» отсутствует.Это может затруднить создание правил, по которым пользователи могут редактировать других пользователей.
  2. Создание пользовательского RoleProvider - Вы можетеунаследуйте от RoleProvider, чтобы настроить, где и как вы храните ваши данные.

    • Плюсы: Работает с web.config
    • Минусы:
      • Необходимо реализовать собственное хранилищерешение
      • По-прежнему всего лишь строка и ограничены так же, как и предыдущее решение
      • Если вы не реализуете его правильно, оно может выполнить много вызовов базы данных.
  3. Создание собственной схемы аутентификации

    • Плюсы: полный контроль - просто выполняйте пользовательские проверки на своей странице и по ошибке / перенаправляйте при необходимости
    • Минусы:
      • Не работает с механизмом авторизации, предоставленным web.config / sitemap.Практически это означает, что добавление страницы в папку (например, / Admin) больше не гарантирует безопасность на этой странице.

Важно отметить, что поставщики членства и роли могут выбираться или настраиваться независимо друг от друга. Я лично рекомендую использовать SqlMembershipProvider, если вы можете, и оценивать ваши возможности для поставщика ролей.

3 голосов
/ 23 ноября 2010

Приятной особенностью членства в ASP.Net является то, что вы можете использовать столько, сколько вам нужно - вы можете хранить пользовательские данные в различных формах (как уже упоминали другие), или вы можете просто использовать членство ASP.Net дляобрабатывать авторизацию сеанса и защиту страницы.

Например, вы можете пройти всю работу и использовать элемент управления входом в систему, серверную часть SQLMembershipProvider и просто позволить членству ASP.Net делать все от начала до конца.

Или вы можете хранить свои собственные имена пользователей и пароли в своей таблице базы данных, самостоятельно аутентифицировать предоставленные данные и затем просто использовать «FormsAuthentication.RedirectFromLoginPage ()», чтобы сообщить членству ASP.Net, что пользователь аутентифицирован, и иметь ASP.Затем Net Membership контролирует доступ к страницам.

ASP.Net Membership проверено и протестировано, его используют тысячи сайтов внутри и за пределами Microsoft, поэтому вы знаете, что код работает и работает хорошо.Если есть проблема, то есть много реализаций, которые найдут ее.У вашего подхода только один пользователь ...

3 голосов
/ 23 ноября 2010

Минусы:

  • Ваше предпочтительное хранилище данных может не поддерживаться полностью из коробки

  • Возможно, несоответствует вашим текущим или будущим требованиям

  • Возможно, вы не до конца понимаете всю сложность того, как это работает (над чем-то, что вы построили сами)

Плюсы:

  • Вы можете сэкономить время по сравнению с собственным прокатом.

Лично ... , если это серьезный проектЯ бы накатил свой (но, конечно, сохраняю аутентификацию по формам).По моему опыту, многие из этих «готовых» функций от MS довольно недолговечны.

3 голосов
/ 23 ноября 2010

Мне не нравится использовать членство.

Используется, когда сценарий «стандартный», но в тех случаях, когда вам нужно больше пользовательских правил, я думаю, что это не работает хорошо. Появляются «обходные пути».

И не нужно хранить в XML, существует другое решение (база данных, например).

1 голос
/ 23 ноября 2010

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

Вот немного контекста, чтобы сформулировать мои ответы.Решения для членства / роли / профиля в .NET состоят из двух частей: инфраструктуры и поставщиков.Структура состоит из методов и информации, с которой ваша программа будет взаимодействовать.Поставщики определяют, как будут храниться данные.

Я считаю, что инфраструктура превосходна.Существует не так много, что вы не можете сделать, независимо от того, как вы хотите взаимодействовать с ним.Реализации по умолчанию дают вам многое бесплатно.Любой недостаток функциональности еще больше смягчается, если вы используете хорошие методы кодирования.Обратитесь к первоначальному приложению ASP.NET MVC за отличным примером обертывания структуры членства.

Кажется, что данные никогда не работают так, как вы хотите, но вы ничего не можете обойти.Во-первых, как сказали люди, есть несколько провайдеров, поставляемых с .NET.И это также, где реализация вашего собственного провайдера вступает в игру.Обычно мы начинаем с создания подкласса SqlMembershipProvider .Если что-то не работает так, как мы хотим, мы переопределяем это.И изменение таблиц данных в более позднее время, если это необходимо, не очень сложно.

Использование того, что уже существует, всегда позволяет нам быстро приступить к работе и адаптироваться по мере необходимости.По правде говоря, изменения в этом коде происходят не часто.Использование решения Microsoft на начальном этапе может оказаться не самым привлекательным, но оно быстро выполнит работу и позволит перейти к решению важных проблем.

1 голос
/ 23 ноября 2010

На самом деле все не обязательно хранится в XML-файле.Вы можете хранить данные о членстве несколькими способами, включая базу данных.

Вы также можете использовать ролевую / членскую библиотеку ASP.NET в качестве отправной точки для создания своего собственного.Есть несколько учебных пособий, посвященных тому, как это делается для веб-сайтов.

Преимущества использования встроенных функций в том, что элементы управления ASP.NET более или менее "просто работают" ..;)

...