Я знаю, что вы говорите (идея Баада), но, пожалуйста, прочитайте сначала:)
Я занимаюсь разработкой приложения на основе ASP.NET MVC, для которого потребуются некоторые специфические функции:
комбинация "локальных" пользователей и входа в Facebook для подключения, но пользователи FB будут "зеркально отображены" в каком-то локальном представлении, потому что будет некоторая статистика и другие вещи, которые необходимо сохранить для обоих типов
авторизация будет 3-х слойной вместо стандартных 2-х слоев asp.net. Под этим я подразумеваю: пользователь в группе (m: n), а группа в роли (m: n), а не пользователь в роли (m: n).
Итак, если бы я хотел использовать стандартный подход аутентификации / авторизации, мне пришлось бы:
реализует пользовательский поставщик членства, и он не будет даже "правильным", потому что он будет использовать методы, такие как AddUserToGroup, AssignRoleForGroup и т. Д.
реализовать собственный принципал / идентификатор для доступа к моим собственным объектам пользователя
приведение HttpContext.User к моему объекту каждый раз, когда это необходимо ...
реализовать пользовательский поставщик ролей
пользовательский механизм sessting AuthCookie (уникальный userId в userdata, нельзя полагаться на имя пользователя со сторонними пользователями FB в системе)
... (вы наверняка можете придумать что-то еще)
Ну, мне действительно не нравится идея "сгибания" и замены каждой детали, чтобы в конце концов получить довольно грязное решение. Поэтому я думаю о реализации своего собственного механизма, инкапсулированного в одном месте - давайте назовем его AuthService.
- AuthService будет поточно-ориентированным синглтоном
- Вместо AuthCookie будет использоваться стандартный объект Session (я знаю, что сеансы также используют куки, но я действительно не вижу преимущества низкоуровневого хранилища (cookie) над сессией)
- AuthService предоставит AuthService.CurrentUser (моего собственного типа), заполняемый из сессии в начале каждого запроса (я думаю, Application_AuthenticateRequest)
- AuthService предоставит в одном месте все методы - ValidateUser, RolesForUser, IsInRole, Logout и т. Д.
Так что теперь .. почему я не должен делать это таким образом? :)
Я думаю, что сессия одинаково безопасна для AuthCookie (те же риски для билетов и authcookie) ..
Я действительно не ищу "модульность" (поставщики ролей "включай и работай", поставщики членства, поставщики профилей ...) - здесь я имею дело с довольно специфическими вещами, я не ожидаю, что стандартные компоненты подойдут ... "мой подход" любой другой недостатки?
Спасибо за все хорошие идеи и извините за мой ужасный английский, я из неанглоговорящей страны:)
R.