那么,存在IIdentity
和IPrincipal
而不是IIdentityMergedWithPrincipal
的目的是什么?何时在同一类中同时实现这两个条件还不够?
另外,为了了解目的,我想知道这个概念的来源:
System.Security.Principal
在那些接口(interface)中实现因此,
UserPrincipal
中的System.DirectoryServices
是否类似于IPrincipal
,但不是偶然或故意实现的?附言我在寻找想法背后的理由,而不是利益/争议比较,因此请不要尝试开始基于观点的讨论
最佳答案
IIdentity
仅用于用户的经过身份验证的身份,无论他们可能具有什么角色。IPrincipal
用于将用户的身份与其在给定安全性上下文中拥有的授权角色结合在一起。
例如,您可以使用第三方登录提供程序(如Facebook或Google)来获取用户的身份,但是由于这些提供程序不提供任何角色,因此您不会从这些提供程序中获取委托(delegate)人。您可以使用自己的应用程序或第三方基于角色的授权提供程序将角色应用于FacebookIdentity
或GoogleIdentity
。不同的应用程序可以期望具有其自己角色的不同主体,但仍使用与另一个应用程序相同的身份。