那么,存在IIdentityIPrincipal而不是IIdentityMergedWithPrincipal的目的是什么?何时在同一类中同时实现这两个条件还不够?

另外,为了了解目的,我想知道这个概念的来源:

  • 它起源于.Net
  • 有身份/主体作为设计模式的概念,这些System.Security.Principal在那些接口(interface)中实现
  • 它起源于其他地方,并且受兼容性的支持

  • 因此,UserPrincipal中的System.DirectoryServices是否类似于IPrincipal,但不是偶然或故意实现的?

    附言我在寻找想法背后的理由,而不是利益/争议比较,因此请不要尝试开始基于观点的讨论

    最佳答案

    IIdentity仅用于用户的经过身份验证的身份,无论他们可能具有什么角色。
    IPrincipal用于将用户的身份与其在给定安全性上下文中拥有的授权角色结合在一起。

    例如,您可以使用第三方登录提供程序(如Facebook或Google)来获取用户的身份,但是由于这些提供程序不提供任何角色,因此您不会从这些提供程序中获取委托(delegate)人。您可以使用自己的应用程序或第三方基于角色的授权提供程序将角色应用于FacebookIdentityGoogleIdentity。不同的应用程序可以期望具有其自己角色的不同主体,但仍使用与另一个应用程序相同的身份。

    09-15 18:39