Alo*_*man 44 .net c# iprincipal iidentity
那么,什么是两个存在的目的IIdentity和IPrincipal,而不是一些IIdentityMergedWithPrincipal?什么时候在同一个类中实现它们是不够的?
另外,为了理解目的,我想知道这个概念来自哪里:
System.Security.Principal在这些接口中实现因此,不UserPrincipal从System.DirectoryServices的行为类似IPrincipal,但不是偶然的还是打算实现它?
PS我正在寻找理念背后的推理,而不是利益/争议比较,所以请尽量不要开始基于意见的讨论
Mar*_*ade 62
IIdentity只是用于用户的身份验证身份,无论他们可能具有什么角色.
IPrincipal用于将用户的身份与他们在给定安全上下文中具有的授权角色相结合.
例如,您可以使用第三方登录提供程序(如Facebook或Google)来获取用户的身份,但您不会从这些提供程序中获取委托人,因为他们不提供任何角色.您可以使用自己的应用程序或第三方基于角色的授权提供程序将角色应用于FacebookIdentity或等GoogleIdentity.不同的应用程序可以期望具有自己的角色的不同主体,但仍然使用与另一个应用程序中相同的标识.
小智 13
主体是用户的安全上下文.
在.NET的情况下,主体支持具有多个身份的概念(这与声明无关).当涉及到开发人员在用户身份方面需要处理的语义时,这一点尤为重要.作为开发人员,您可能会被要求支持来自不同来源(身份提供商IdP)的多个身份,例如:Twitter,Google等等.
那么IPrincipal和IIDentity有什么不同呢?IPrincipal是安全上下文(对于单个线程),IIDentity是与来自特定身份提供者/授权机构的该用户相关联的属性集.