c# - ClaimsPrincipal的作用是什么,为什么会有多个Identity?

标签 c# .net authentication wif claims-based-identity

我试图根据应用程序(依赖方)的声明来了解 .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/

相关文章:

c# - 销毁对象时如何使程序执行某些操作?

javascript - 如何在 jQuery 对话框中获取 ActionLink 参数

c# - 从第三方数据源导入数据(开放架构设计)

c# - 当前使用 C# 扩展 Excel 的最佳方法是什么?

authentication - 从 Grails 中的过滤器定义 Controller 可访问变量

c# - 使用 RestSharp 序列化列表中的对象

c# - 循环中的 Lambda 变量捕获 - 这里发生了什么?

c# - 身份验证失败,因为远程方已关闭传输流

postgresql - Peer authentication failed for user "geo"geodjango 教程 postgresql 错误

c# - .Net 项目总是重建,而不是由 CopyLocal 属性引起的最新