Каковы эффективные способы создания пользовательского класса "ClaimsAuthorizationManager" Windows Identity Foundation? - PullRequest
3 голосов
/ 01 февраля 2010

Я работаю над самым первым проектом в моем офисе, где мы будем использовать «Windows Identity Foundation» с авторизацией на основе утверждений. Для этого Microsoft .net предоставляет абстрактный класс ClaimsAuthorizationManager. Чтобы использовать этот класс, вы переопределяете два метода: конструктор и CheckAccess(context as ClaimsAuthorizationContext).

Конструктор все настраивает; затем, когда пользователь получает доступ к чему-либо, например, к веб-странице, CheckAccess вызывается с параметром, который указывает пользователя, ресурс, к которому осуществляется доступ, и действие, которое должно быть выполнено с ресурсом. Например, CheckAccess может быть вызвано, чтобы узнать, должен ли пользователь Bob получить доступ к ресурсу http://www.mysite.com/SecretPage.aspx для выполнения действия GET. CheckAccess просто возвращает true или false. Windows Identity Foundation дает нам гибкость для реализации CheckAccess практически любым возможным способом!

В примерах кода, которые предоставляет Microsoft, CheckAccess настроен на разрешение доступа пользователю, только если у него есть заявление на день рождения, которое указывает на 21 год или старше. Эта политика дается в виде простого текста в файле web.config и читается в конструкторе ClaimsAuthorizationManager.

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

Что нужно иметь в виду, когда я приступаю к этому проекту?

ОБНОВЛЕНИЕ: я работал над системой представления политик обязательных заявок в виде строк. Я использую логику бинарного дерева для группировки политик. Я веду базу данных претензий, связанных с "ресурсами" и "действиями".

Кто-нибудь еще здесь создал класс ClaimsAuthorizationManager?

1 Ответ

1 голос
/ 09 февраля 2010

Я думаю, отрадно, что вы с нетерпением ждете попыток не писать мертвый код, НО, я думаю, вы забегаете вперед.

Вам необходимо создать один или несколько пиков, которые рассматриваются как выбрасываемые, чтобы определить для себя, что имеет смысл для вашего конкретного сценария.

Тем не менее, если все ваши правила находятся в БД, создайте базовый CAM sproc, который читает имя sproc из файла конфигурации. Аргументы CheckAccess не будут меняться, поэтому сигнатура sproc может быть неизменной, что позволяет вам при необходимости их выключать.

...