Каков наилучший способ разработки настраиваемой системы входа / аутентификации в ASP.NET? - PullRequest
5 голосов
/ 24 февраля 2009

Сайт, который я разрабатываю, позволит пользователям входить в систему на 3 уровнях.

Уровень 1 - Не авторизован

Уровень 2. Они регистрируют свой адрес электронной почты, получают подтверждение по электронной почте и входят в систему таким образом.

Уровень 2 - Они входят в систему с именем пользователя / паролем, которые затем отправляются веб-службе. Если веб-сервис возвращается с «успешным входом», он входит на сайт.

В зависимости от уровня входа в систему некоторые веб-страницы будут доступны, в то время как другие будут ограничены.

Мой вопрос: как мне развить это?

Я делаю проект в ASP.NET MVC.

Должен ли я просто написать свой собственный AccountController? Должен ли я использовать .NET Forms Authentication? В чем преимущество проверки подлинности с помощью форм по сравнению с выполнением ее вручную с помощью кода .NET?

Если бы я сделал это сам при успешном входе в систему, я бы просто сохранил вошедшего в систему пользователя в переменной сеанса. Есть ли вред от этого или для того, что я делаю, это нормально?

Ответы [ 4 ]

4 голосов
/ 24 февраля 2009

проверьте этот предыдущий вопрос в SO:

Как мне реализовать членство пользователя на моем сайте ASP.NET MVC?

Проверьте этот блог об основах членства в ASP.Net MVC.

1 голос
/ 24 февраля 2009

Я хотел бы предложить, что лучший способ написания вашей собственной пользовательской системы членства / аутентификации - это на самом деле использовать встроенный класс MembershipProvider в .NET и извлекать из него ваш собственный пользовательский класс. Вы всегда можете создать своего собственного поставщика членства, унаследовав классы System.Web.Security.MembershipProvider Role и Profile !) Внутри класса. .NET Framework и предоставьте свою собственную конкретную реализацию. Таким образом, вы получаете преимущество от использования надежной и надежной «базовой структуры», на которой вы можете построить свою систему аутентификации и авторизации.

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

Должен признать, что единственное, что я нашел необычным из-за упущения в «стандартных» встроенных провайдерах членства в ASP.NET, это отсутствие простого способа позволить пользователям регистрироваться на веб-сайте, но не «проверять» сразу же отправьте пользователю электронное письмо, содержащее «ссылку для проверки», которую он должен щелкнуть, прежде чем получить доступ к веб-сайту. Хотя это не стандартная функция в классе ASP.NET MembershipProvider, ее относительно легко реализовать.

Скотт Митчелл (Scott Mitchell) предлагает большую серию статей о членстве в ASP.NET, поставщиках ролей и профилей (в том числе о проверке учетной записи по электронной почте перед входом в систему), которые можно найти здесь:

Изучение членства, ролей и профиля ASP.NET 2.0

, что должно помочь, если вы получаете своего собственного провайдера от провайдеров ASP.NET.

1 голос
/ 24 февраля 2009

Я бы настоятельно рекомендовал не использовать собственную систему аутентификации. .net Forms auth очень прост в использовании; зачем тратить время на его создание? Существует много ловушек для систем аутентификации, и если вы не являетесь MS, у вас действительно не будет ресурсов для его создания и тестирования.

Определение того, какие страницы пользователь может видеть, является авторизацией, и что вы, безусловно, можете написать свой собственный код. Я бы посоветовал изучить интерфейсы Identity / Principal, доступные в .net, и переопределить метод IsInRole для удовлетворения ваших потребностей.

Сессии не очень хороши для безопасности. Они плохо работают в сценариях веб-фермы, и когда пул приложений решает перезапустить ... все ваши пользователи вышли из системы. .net формы auth по умолчанию использует куки.

0 голосов
/ 24 февраля 2009

В вашем случае, я бы порекомендовал использовать простую проверку подлинности с помощью форм. (См. Как выполнить простую проверку подлинности с помощью форм ). Простой LoginController может справиться с этим.

Нет ничего «неправильного» в хранении данных профиля пользователя в сеансе, но это может привести к проблемам с масштабируемостью, если вам когда-нибудь понадобится сбалансировать нагрузку на ваш веб-сайт. Рекомендуемый метод - реализовать собственный RoleProvider. (См. Реализация поставщика ролей .)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...