我试图根据应用程序(依赖方)的声明来了解 .NET 背后的安全模型。
我知道有两个主要类:
- ClaimsPrincipal - 运行进程的安全上下文
- ClaimsIdentity - 存储有关用户的信息 - 身份验证状态和声明
问题是,ClaimsPrincipal 只包含一组身份并指向当前使用的身份,但据我所知,主体通常永远不会包含超过 1 个身份,即使它会 - 用户永远不会登录2 个或更多身份。
ClaimsPrincipal 对我来说,除了用来获取当前身份,恕我孤陋寡闻,没用。
除了我所说的和关于 ClaimsPrincipal 类的向后兼容性之外,我还缺少什么?
最佳答案
The thing is, ClaimsPrincipal contains just a collection of identities and points to the currently used one but as far as I know, the principal usually never contains more than 1 identity and even if it would - the user is never logged in with 2 or more identities.
这是一个错误的假设。事实上,如果您的应用程序需要 n 因素身份验证(n > 1),上下文中的 ClaimsPrincipal 将始终具有 1 个以上的身份。
试着这样看。
委托(delegate)人 = 用户
身份 = 驾照、护照、信用卡、Google 帐户、Facebook 帐户、RSA SecurID、指纹、面部识别等。
如果您被警察拦下,他们不会仅根据您的驾照来验证您的真实身份。他们还需要看到你的脸。否则你可以出示任何人的驾照。
因此,为什么身份验证可以而且有时应该基于多个身份是有道理的。这就是为什么 1 个 ClaimsPrincipal 可以有任意数量的 ClaimsIdentity。
关于c# - ClaimsPrincipal的作用是什么,为什么会有多个Identity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32584074/