在谈论.NET中的身份时,我们有Principal的想法。接口IPrincipal
与实现ClaimsPrincipal
一起使用。我们甚至可以使用Thread.CurrentPrincipal
随时访问该接口的一个实现实例。
现在,我从未明白这个校长到底是什么。实际上,起初我认为它代表了当前用户的身份。但事实并非如此,实际上还有另一个接口IIdentity
和实现ClaimsIdentity
。搜索一下我在MSDN上找到了以下内容:
主体对象代表代表其运行的用户的安全上下文,包括该用户的身份(IIdentity)及其所属的任何角色。
但代表运行代码的用户的安全上下文究竟意味着什么?我想我还没有得到它应该代表什么。
答案 0 :(得分:14)
在授权访问资源或运行某些代码的能力时,仅仅知道哪个用户正在授权该操作,但在授权它的角色是不够的。
认为这与提升shell时大致相同:shell现在在不同的主体(具有更多权限)下运行,即使主体的身份仍然相同(您的用户帐户)。 / p>
IIdentity
类型专注于身份验证的问题,即确定系统已知的身份实际上属于想要在该身份下行事的代理。这是授权任何事情的必要先决条件,但不是整个故事。
答案 1 :(得分:8)
主体是一个封装身份和角色的抽象事物,因此它是运行代码的安全上下文。这可以是Windows身份(即Windows或Active Directory用户帐户)和Windows“角色”,也称为“组”,或者它可以是独立于Windows用户和角色的身份/角色,但仍可在多个用户和角色中使用应用。第三,它也可以是仅在您的应用程序中定义的身份和角色的自定义概念。
安全上下文不是一个静态的东西;可以通过调整主体的角色来更改它,从而为身份(用户)和在安全上下文下运行的应用程序提供更多或更少的权限。
这是开始学习更多相关内容的好地方:https://msdn.microsoft.com/en-us/library/z164t8hs.aspx
答案 2 :(得分:3)
描述说明了,校长是身份加角色。
它实际上就像
一样简单public interface IPrincipal
{
IIdentity Identity { get; }
bool IsInRole( string role );
}
抽象它的想法非常重要。虽然最初只有少数实现(包括WindowsPrincipal
,RolePrincipal
和GenericPrincipal
),但后来引入了其他实现(例如ClaimsPrincipal
)。许多遗留代码可以无缝升级到新的实现,具有所有好处,但不会改变任何其他内容。
答案 3 :(得分:0)
委托人代表用户的身份和角色,并代表用户行事。
来源:https://docs.microsoft.com/en-us/dotnet/standard/security/key-security-concepts