API поставщика профиля / членства и роли очень тесно связан и очень узко определяет вещи. Преимущество заключается в том, что вам мало что нужно сделать, чтобы заставить работать большую функциональность. Недостатком является то, когда то, что вам нужно, не соответствует тому, что предоставляется. Тем не менее, есть много потенциальных ошибок, о которых API заботится для вас, что действительно имеет смысл использовать их, по крайней мере, для аутентификации.
Мои потребности не соответствовали предоставленным API, и мне действительно нужна была только часть Членства. Проблема в том, что у меня был кусок, где мне нужно было использовать одинаковую аутентификацию и авторизацию для веб-приложения и настольного приложения. Мои потребности довольно уникальны, но они предназначены для классной комнаты.
Получить членство, чтобы работать для моих нужд не было так сложно. Я просто должен был реализовать API членства. Есть несколько функций, которые мне просто не нужны в API-интерфейсе членства, такие как самостоятельная регистрация и т. Д. Конечно, это поставило меня перед задачей управления ролями. Как правило, если ваш пользовательский объект реализует IPrinciple, его можно использовать напрямую, но существуют проблемы с сериализацией пакетов Visual Studio веб-сервера разработки, если ваш пользовательский класс не определен в той же сборке. Эти проблемы связаны с сериализацией, и ваш выбор включает помещение объекта в GAC или ручную сериализацию между доменами самостоятельно с объектами в GAC, такими как GenericPrincipal и GenericIdentity. Этот последний вариант - то, что я должен был сделать.
Суть в том, что если вы не возражаете против того, чтобы API выполнял все управление за вас, то он будет работать просто отлично. Это немного умная инженерная работа, и она пытается сбить вас с пути приличных мер безопасности. Я работал с несколькими различными API-интерфейсами аутентификации / авторизации (большинство из которых не основаны на CLR), и API действительно немного ограничен. Однако, если вы хотите избежать ловушек с управлением сессиями / состоянием / кэшем, вам действительно нужно использовать API и подключать своих собственных провайдеров по мере необходимости.
В вашей базе данных, если вам нужно связать пользователя с каким-либо элементом базы данных, вы сохраните идентификатор входа пользователя (Context.User.Identity.Name).