【问题标题】:How to manage user claims?如何管理用户索赔?
【发布时间】:2017-07-12 11:57:50
【问题描述】:

我目前正在使用 asp.net 核心设计一个系统,我想实现基于声明的授权,但有一个特定部分让我感到困惑。

提出声明时,声明将包括类型和值以及可选的颁发者。在处理程序中,可以在确认访问之前检查此声明和颁发者。

但是这个 issuer 并没有存储在 Identity db 中,那么处理程序如何检查 issuer?

我是否误解了这一切的运作方式?我的理解是,用户提出某种类型的声明,他们的声明具有一定的价值,而颁发者是声明类型的验证者,实际上对该用户具有该价值。

处理程序将检查该值并可能检查颁发者,但当数据库不存储它时它不能。那我就不明白发行人的意思了。

我希望用户拥有一系列声明,包括验证这些声明的人员/内容,并让应用程序能够随时验证这些声明。

请帮助我理解。

我已经这样测试了:

  1. 将 asp.net 核心应用与 Identity 结合使用。
  2. 注册用户。
  3. 向用户添加包含类型、值和颁发者的声明。 (例如,EmployeeNumber, 312, Microsoft。
  4. 在控制器/操作上添加 [Authorize(Policy="MicrosoftEmployeesOnly")] 以限制访问。
  5. 将策略添加到具有要求的 StartUp.cs 中的服务中。
  6. 添加具有处理程序的要求代码,该处理程序检查用户是否拥有 EmployeeNumber 类型的声明、具有值并且由 Microsoft 发布。
  7. 登录和用户声明将从数据库加载到身份中。
  8. 处理程序将无法验证用户,因为颁发者 (Microsoft) 已丢失,现在只显示 Local Authority。

我在这里唯一能想到的是,一旦将声明添加到数据库中,它就会被认为已由 Microsoft 验证,现在由应用程序(本地机构)代表 Microsoft 持有。

如果是这样的话:

  1. 为什么要在任何处理程序中检查颁发者?
  2. 如何撤销索赔?

我希望能够随时选择前往该发行人并检查索赔,这意味着发行人可以撤销/无效索赔。该员工声称他们在 Microsoft 拥有员工编号,最初 Microsoft 对此进行了验证。一段时间后,微软将员工踢出并在他们的系统上删除了他。该应用程序应该能够在用户每次登录时与 Microsoft 核对,以查看声明是否有效。在这种情况下,它将不再有效。

我是不是有点生气了?

【问题讨论】:

  • 嘿。抱歉,我不得不删除我的答案,因为我没有足够的时间来修复我的答案,而且在目前的状态下,它似乎不是你要找的……我希望其他用户能够为您提供帮助。
  • Matías - 感谢您的宝贵时间

标签: c# asp.net authentication asp.net-core claims-based-identity


【解决方案1】:

在您链接到此问题from my blog 时将其发布在这里,它可能对某人有用

我认为您对索赔的性质略有误解, 鉴于术语,我可以理解。你似乎正在服用 “声称”意味着用户“声称”他们有一定的 属性,并且您想检查这是否属实。

这不是索赔在这里的运作方式。索赔本质上是 用户的“属性”。在使用角色的旧方式中,用户 将属于一定数量的角色。这些只是“属性” 用户现在有,所以更通用。一个用户可能有多个 与他们所处的角色相对应的声明。

在身份验证期间检查用户的身份,然后 指出您将用户拥有的Claims 集分配给 ClaimsIdentity 对象。这是您从中获取索赔的点 数据库,并确保他们只得到他们应该拥有的那些。 如果您需要有人验证索赔,那么您需要 让整个过程发生在此之外。只有索赔 已确认的应添加到ClaimsIdentity

现在,您可以在 CookieAuthenticationMiddleware 验证安全票 在名为 ValidatePrincipal 的后续请求中加载,但我没有 确定这是否真的是你需要的。

以及您随后的回复:

感谢您的回复。我现在明白这些说法是 一旦他们进入数据库,有效地验证了索赔。我猜他们 可以从数据库中删除作为撤销声明的一种方式。

但是,我认为,正如您所建议的,最好的方法是拥有这个系统 在外面,它只是在需要时提供索赔。该设计 是应用程序将有不同类型的帐户 实体和账户将能够提出索赔,例如“我 是家长”。家长会寻求一个授权帐户来验证 这。这可能需要授权账户持有人实际 在验证之前查看一些真实的文档。其他索赔,可以 改变。例如,有父母责任的父母需要一个 多一点验证,但也可能失去父母的责任 在现实世界中,因此需要撤销索赔的设施 可用。

所以,我认为设计应该是使用索赔系统与 授权属性跟随你的优秀文章,但有一个 允许验证和撤销提要的独立系统 声明系统。

【讨论】:

  • 谢谢。我只是在这里发布一个答案,参考您在博客上的回复。因此,我将添加:来自 Andrew Lock 的精彩回复:Andrew Lock。我试图推动索赔系统做一些它不打算做的事情,因此解决方案是在索赔系统之外编写验证和撤销,并仅包含经过验证的索赔。请在此处查看文章和 cmets:Introduction to Authorisation in ASP.NET Core
猜你喜欢
  • 2016-09-06
  • 2013-01-17
  • 2021-08-03
  • 2016-12-31
  • 1970-01-01
  • 2021-10-10
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多