在谈论.NET中的身份时,我们有了Principal的想法.有接口IPrincipal
,并与它一起实现ClaimsPrincipal
.我们甚至可以随时访问该接口的一个实现实例Thread.CurrentPrincipal
.
现在,我从未明白这个校长是什么.实际上,起初我认为它代表了当前用户的身份.但事实并非如此,实际上还有另一个界面IIdentity
和实现ClaimsIdentity
.搜索一下我在MSDN上发现了以下内容:
主体对象表示代表其运行的用户的安全上下文,包括该用户的身份(IIdentity)以及它们所属的任何角色.
但代表代码运行的用户的这种安全上下文真的意味着什么?我想我还没有得到它应该代表什么.
Asa*_*din 18
在授权访问资源或运行某些代码的能力时,仅仅知道哪个用户正在授权该操作,但在授权它的角色是不够的.
可以认为这与提升shell时大致相同:shell现在在不同的主体(具有更多权限)下运行,即使主体的身份仍然相同(您的用户帐户).
该IIdentity
类型侧重于认证问题,即确定系统已知的身份实际上属于想要在该身份下行动的代理.这是授权任何事情的必要先决条件,但不是整个故事.
ror*_*.ap 10
委托人是一个封装身份和角色的抽象事物,因此它是运行代码的安全上下文.这可以是Windows身份(即Windows或Active Directory用户帐户)和Windows"角色",也称为"组",或者它可以是独立于Windows用户和角色的身份/角色,但仍可在多个用户和角色中使用应用.第三,它也可以是仅在您的应用程序中定义的身份和角色的自定义概念.
安全上下文不是一个静态的东西; 可以通过调整主体的角色来更改它,从而为身份(用户)和在安全上下文下运行的应用程序提供更多或更少的权限.
这是一个开始学习更多相关内容的好地方:https: //msdn.microsoft.com/en-us/library/z164t8hs.aspx
描述说,主体是身份加角色。
其实很简单
public interface IPrincipal
{
IIdentity Identity { get; }
bool IsInRole( string role );
}
Run Code Online (Sandbox Code Playgroud)
抽象它的想法非常重要。虽然原本只有少数实现(包括WindowsPrincipal
,RolePrincipal
和GenericPrincipal
)后来其他implementatiins介绍(中ClaimsPrincipal
为例)。而且许多遗留代码可以无缝升级到新的实现,具有所有优点,但无需更改其他任何内容。