Почему PrincipalPermission(Attribute) не учитывает тип аутентификации?
IIdentity
интерфейс выставляет AuthenticationType
свойство, которое я хотел бы принять во внимание, потому что все немного по-другому, если пользователь входит в систему с x509 или с базовой аутентификацией имени пользователя / пароля, вы знаете:
[PrincipalPermission(SecurityAction.Demand, Role = "BigBoss", AuthenticationType="basic")]
protected static void DoSomething() {}
Но я не могу. Более того, оба PrincipalPermission
а также PrincipalPermissionAttribute
запечатаны (спасибо, ребята), поэтому я не могу добавить нужную мне функциональность. Это по какой-то особой причине или просто недостаток дизайна? Есть идеи, как обойти?
1 ответ
Несмотря на то, что они связаны с безопасностью, аутентификация и авторизация на самом деле являются отдельными задачами, и связывание авторизации напрямую с механизмом аутентификации, как правило, не особенно хорошая идея.
Если вы чувствуете, что у вас есть веские причины для добавления такой связи, то у вас есть несколько доступных подходов:
- Добавьте роль к вашему принципалу, чтобы отразить механизм аутентификации, затем потребуйте и фокальную роль, и псевдоролевую роль механизма аутентификации, когда последний имеет значение.
- В то время как
PrincipalPermission
а такжеPrincipalPermissionAttribute
запечатаны, ничто не мешает вам создавать аналогичные типы, которые делают то, что вы хотите.
Для #2, вы могли бы уйти с созданием настраиваемого атрибута, который создает настраиваемое разрешение, которое переносит PrincipalPermission
вместо того, чтобы заново создавать всю свою логику с нуля.