2009-03-31 3 views
19

Есть ли альтернативы \ mods для .net Membership?Альтернативы членству в .Net

Я считаю это довольно ограничительным;

  • Невозможно изменить имя пользователя, легко. Вы должны создать нового пользователя и скопировать поля, но затем вы потеряете первичный ключ ИЛИ вам нужно самостоятельно отредактировать таблицу пользователя.

  • Дополнительные поля профиля хранятся вместе как одна капля.

ответ

13

Членство в ASP.Net использует модель поставщика. Это означает, что вы совершенно свободны в реализации своего собственного поставщика членства или даже наследуете и расширяете существующего поставщика, если вы следуете за provider contract.

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

0

Что касается изменения имени пользователя, это может быть легко осуществлено с помощью метода CreateNewUser() и заполнения соответствующих полей на основе текущего пользователя, а затем удаления текущего пользователя.

Профильные поля не являются частью модели .NET Membership Provider, а являются частью Провайдера профилей. Это очень дискуссионная тема, и для большинства производственных машин правильным решением является переход на лучшее решение поставщика решений, например, Table Profile Provider, в котором хранятся поля профиля, как вы ожидали, а не как blob-blog blog , Кроме того, вы можете легко свернуть собственный провайдер профилей, проверить instructions here.

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

+2

При создании нового пользователя он также будет генерировать новый идентификатор для него, не так ли? Нехорошо, если пользователь уже ссылается на другие таблицы. – XOR

+0

Нет, но довольно легко исправить в вашем методе «изменение» имени пользователя. – JoshJordan

0

Что касается профиля, то есть пара alternatives out there. Эти два используют либо таблицу, либо вы можете вызвать хранимую процедуру. Конечно, вы также можете реализовать свои собственные. Я лично устал от использования Провайдеров профилей и обнаружил, что работать с профилем в моем коде было легче контролировать и содержать.

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

+0

Не могли бы вы объяснить, почему вы не использовали модель поставщика профилей? – kseen

2

Поскольку модель членства ASP.NET построена вокруг поставщиков, существует ряд альтернатив.

По умолчанию у пользователей есть ProviderUserKey, который является GUID, и это основной ключ базы данных, поэтому вы можете написать что-то, чтобы изменить свое имя пользователя, если хотите.

Что касается профиля, да, по умолчанию капля довольно раздражает. Вы можете взглянуть на SQL Table Profile Provider, который отображает профили на таблицы или довольно быстро roll your own.

+0

@Dan - по UserID я ссылался на PK в таблицах базы данных aspnet_Membership и aspnet_users, которые действительно называются UserId –

8

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

Проект называется Fast, Secure и Concise Authentication, или FSCAuth для краткости. Это лицензия BSD. Вы можете загрузить его по адресу Binpress или по телефону Bitbucket

Это гибкая модель «UserStore» (эквивалент поставщика услуг) позволяет вам создавать свою базу данных в любом случае. Он может поддерживать текстовые текстовые файлы, XML, MongoDB, Sql Server и где угодно между ними.

Вот список вещей, где я думаю, что это особенно выделяется над формами проверки подлинности:

  • Stateless системы аутентификации. Нет необходимости отслеживать пользовательские сеансы в базе данных или в памяти. Это делает тривиальным масштабирование до нескольких серверов, требующих незначительных (если есть) изменений кода аутентификации.
  • Используйте что-нибудь как уникальный идентификатор для каждого пользователя. Правильно, не больше GUID! Все, что будет вписываться в строку, - это честная игра.
  • Исходная HTTP-аутентификация. Вы можете включить базовую проверку подлинности только на желаемых страницах (или на глобальном уровне), и вы можете делать те же вызовы, как если бы они использовали типичные файлы cookie аутентификация
  • Трудно сделать небезопасным. Из-за того, как это работает, и я оставляю как можно меньше основного кода для конечного пользователя для фактической проверки подлинности, он чрезвычайно безопасен и останется таким, если вы просто не попытаетесь его сломать. Я обрабатываю файлы cookie, HTTP Basic Auth и все хэширование. Вы просто даете FSCAuth базу данных для ее ввода.
  • Поддержка хэшей BCrypt для триггеров. How to do it.. В Forms Authentication это almost not possible
  • мне нравится :)

Конечно, это также не хватает, и, чтобы быть справедливым, я буду включать несколько вещей, которые отсутствуют

  • Идентификация статических файлов в IIS 6 пока не представляется возможным (0)
  • Не существует защиты от грубой силы (пока). Это означает, что вам нужно убедиться, что один и тот же человек не пытается попасть на страницу входа 200 раз за 2 секунды.
  • Он не встроен в ASP.Net
  • Нет ОС Windows или проверка подлинности паспорта (без планов когда-либо добавить)