IIdentity
接口暴露了AuthenticationType
属性,我想考虑到这一点,因为如果用户使用x509或基本用户名/密码认证登录,情况会有所不同,你知道:
[PrincipalPermission(SecurityAction.Demand, Role = "BigBoss", AuthenticationType="basic")]
protected static void DoSomething() {}
但是我不能。此外,PrincipalPermission
和PrincipalPermissionAttribute
都是密封的(谢谢伙计们),所以我不能添加我需要的功能。这是出于某种特殊原因还是仅仅是设计缺陷?有什么办法吗?
尽管两者都与安全相关,但身份验证和授权实际上是分开的关注点,将授权直接耦合到身份验证机制通常不是一个特别好的主意。
如果您觉得有令人信服的理由添加这样的耦合,那么您有两个可用的方法:
- 向您的主体添加一个角色以反映认证机制,然后在后者重要时同时要求焦点角色和认证机制伪角色。
- 虽然
PrincipalPermission
和PrincipalPermissionAttribute
是密封的,但没有什么可以阻止您创建类似的类型来做您想做的事情。
对于#2,您可以创建一个自定义属性,该属性创建一个自定义权限来包装PrincipalPermission
,而不是从头开始重新创建其所有逻辑。