什么是.NET的主要人物?

时间:2015-02-10 16:10:34

标签: c# .net security

在谈论.NET中的身份时,我们有Principal的想法。接口IPrincipal与实现ClaimsPrincipal一起使用。我们甚至可以使用Thread.CurrentPrincipal随时访问该接口的一个实现实例。

现在,我从未明白这个校长到底是什么。实际上,起初我认为它代表了当前用户的身份。但事实并非如此,实际上还有另一个接口IIdentity和实现ClaimsIdentity。搜索一下我在MSDN上找到了以下内容:

  

主体对象代表代表其运行的用户的安全上下文,包括该用户的身份(IIdentity)及其所属的任何角色。

但代表运行代码的用户的安全上下文究竟意味着什么?我想我还没有得到它应该代表什么。

4 个答案:

答案 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 );
}

抽象它的想法非常重要。虽然最初只有少数实现(包括WindowsPrincipalRolePrincipalGenericPrincipal),但后来引入了其他实现(例如ClaimsPrincipal)。许多遗留代码可以无缝升级到新的实现,具有所有好处,但不会改变任何其他内容。

答案 3 :(得分:0)

  

委托人代表用户的身份和角色,并代表用户行事。

来源:https://docs.microsoft.com/en-us/dotnet/standard/security/key-security-concepts