Помощь с решением аутентификации / авторизации MVC - PullRequest
6 голосов
/ 08 марта 2011

У меня есть приложение MVC 3, которое я создаю, и мне нужно найти хорошее решение для управления аутентификацией и авторизацией. Я использовал членство, и я не хочу использовать его в этом случае - я предпочитаю использовать свой собственный дизайн и таблицы. Тем не менее, я открыт для реализации своей собственной логики, используя встроенные интерфейсы, если это уместно.

Вот мои требования:

  • Пользователь может быть частью одной или нескольких ролей.

  • Роли могут быть сопоставлены любому количеству «разрешений» (многие ко многим). Разрешение - это что-то вроде «Может редактировать посты других пользователей».

  • Каждое действие контроллера может разрешить доступ к одной или нескольким ролям (или может не требовать авторизации для общедоступных страниц).

  • Мне также понадобится контроль «на уровне возможностей», который позволяет ролям просматривать / обновлять различные элементы в представлении. Может использовать разрешения для управления этими ролями.

  • В качестве дополнительного примечания, я, вероятно, также позволю участникам регистрироваться, используя свои учетные записи Facebook и / или Twitter. Но это может быть сделано независимо от моей пользовательской реализации членства, если это уместно (т.е. создайте пользовательского пользователя при регистрации, затем привяжите его к учетной записи FB / Twitter).

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

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

Я также не уверен, должен ли я использовать некоторые из встроенных элементов управления .NET для регистрации, аутентификации, забытого пароля и т. Д. Мой инстинкт не в том, так как мне обычно нравится создавать их самому, и я Также не уверен, будут ли они работать в пользовательских настройках. Но если я ошибаюсь, дайте мне знать.

Заранее спасибо.

1 Ответ

4 голосов
/ 08 марта 2011

Помните, что есть две разные части в структуре аутентификации / авторизации ASP.NET.Первый - это интерфейс с поставщиками членства и ролей, а затем есть сервер, использующий SqlMembershipProvider и SqlRoleProvider .

. По моему личному опыту,Мне было проще всего написать свои собственные версии MembershipProvider и RoleProvider.Я думаю, что это удовлетворит все ваши требования.

Обновление : Джаред спросил меня: «Кажется, реализация MembershipProvider и RoleProvider добавляет много накладных расходов (и пух), которые мне никогда не понадобятся/ Использовать. Это все еще путь? Что я выиграю от этого? "

Я думаю, что если вы используете платформу аутентификации / авторизации, вы можете воспользоваться множеством встроенных вещей.Например вы можете украсить контроллеры их методами авторизации на основе таких ролей, как [Authorize(Roles = "DefaultUser")].Также вы можете поместить этот вид проверочного кода непосредственно в представления, если это необходимо, например:

<% if (Request.IsAuthenticated) { %> 
<p>Only authenticated users see this.</p>
<% } %>

Кроме того, Аутентификация / Авторизация заботится о грязной работе по настройке ролевых / пользовательских файлов cookie и их шифрованию.Если вы катите свою собственную, то это то, что вы должны сделать сами.

Джаред также хочет: «Пользователь может быть частью одной или нескольких ролей».и «Роли могут быть сопоставлены с любым количеством« разрешений »(многие-ко-многим). Разрешение - это что-то вроде« Может редактировать сообщения других пользователей ».

Я считаю роли и разрешения тем же.Таким образом, один пользователь может иметь несколько ролей и разрешений, например «CanEditPosts», «Admin» и т. Д.

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