Я не могу себе представить, что не существует эффективной, легкой, безопасной библиотеки аутентификации и авторизации для приложений ASP.NET, которая была бы проста в использовании, например, в ваших контроллерах и представлениях.Я прочитал тонны статей и провел миллионы поисков, но пока не нашел.Кто-нибудь знает о такой библиотеке?Или кто-то создал его сам и готов поделиться?
Система аутентификации ASP.NET в основном основана на имени пользователя, а не на идентификаторе пользователя.Я действительно не понимаю этого.Представьте, что вы хотите создать блог с комментариями.Пользователь может зарегистрироваться и оставить комментарий.Два хорошо известных примера MVC (Nerddinner и MVC Music Store) используют систему аутентификации asp.net по умолчанию (membershipprovider / идентификатор / принципал и т. Д.) И используют имя пользователя для хранения пользователя, принадлежащего какому-либо объекту, например, поле «HostedBy».
Мне кажется, что это не очень хорошая практика:
Невозможно изменить имя пользователя без необходимости изменения всех связанных записей.
Почему бы нам не использовать int как Id?Вам нужно всего 8 байтов для хранения 16 миллионов пользователей.Если вы не ограничите имя пользователя 8-байтовыми символами, оно будет менее эффективным с точки зрения пространства хранения.
Отношения на основе строк кажутся не очень эффективными, поскольку поиск на основе строк выполняется медленнее, чемпоиск на основе целых чисел.
Ок, я могу представить, почему вы хотите использовать Guid, а не int, потому что это практически невозможно угадать и запомнить, и что может повысить безопасность в некотором роде;если это причина, для меня это нормально.
Но тогда остается вопрос, почему интерфейс IIdentity делает доступным только Имя пользователя, а НЕ ИД пользователя.Если вы используете UserId в качестве внешнего ключа, например, сложно получить список всех сообщений текущего пользователя, вошедшего в систему: вам всегда нужен поиск в базе данных, чтобы выбрать UserId, принадлежащий имени пользователя.
ДругойЧто меня интересует, так это то, что система аутентификации выглядит довольно раздутой.Я думаю, что не более 90% пользователей будут использовать систему аутентификации только для одного приложения.Итак, зачем создавать функциональность по умолчанию, чтобы он мог обслуживать несколько приложений?(столбец приложения в aspnet_Users).
Если вас это не волнует, возможно, все в порядке, но я хочу подготовить более 16 миллионов пользователей, не так ли?Или я хочу сервер своих страниц менее 50 мс ... Итак ... почему, черт возьми, Microsoft построила систему аутентификации по умолчанию таким образом?Мне это кажется довольно раздутым и дерьмовым.
Смежный вопрос (который не дает ответа на мой):
Как я могу получить доступ к UserId в ASP.NET Membership без использованияMembership.GetUser ()