1

我目前正在设计一个系统使用asp.net核心,我想执行基于权利的授权,但一个特定的部分令我困惑。如何管理用户声明?

当提出索赔时,索赔将包括类型和价值以及可选的发行人。在处理程序中,可以在确认访问之前检查此索赔和发行人。

但是,这个发行者没有存储在身份数据库,那么处理程序如何检查发行人?

我误解了这一切是如何工作的?我的理解是,用户提出某种类型的权利主张,他们的权利要求具有一定的价值,发行人是实际具有该用户价值的权利要求类型的验证人。

处理程序将检查值,并可能检查发行者,但是当数据库不存储时,它不能。那时我不明白发行人的观点。

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

请帮我理解。

我已经测试了这个像这样:

  1. 使用带有标识的asp.net核心应用。
  2. 注册一个用户。
  3. 向包含类型,值和发行者的用户添加索赔。 (例如,EmployeeNumber,312,Microsoft
  4. 在控制器/操作上添加一个[Authorize(Policy =“MicrosoftEmployeesOnly”)]以限制访问
  5. 将此策略添加到具有需求的StartUp.cs中的服务中。
  6. 添加具有处理程序的需求代码,该处理程序检查用户是否具有EmployeeNumber类型的声明,并具有值并且由Microsoft颁发。
  7. 登录和用户声明已从db加载到标识
  8. 处理程序将无法验证用户,因为发行人(Microsoft)已经丢失,现在只是说Local Authority。

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

如果这是真的,那么:

  1. 为什么在所有检查发行人的任何处理?
  2. 你如何撤销索赔?

我希望能够有选择地去那个发行机构并在我想要的时候检查这个索赔,这意味着发行人可以撤销/无效索赔。该员工声称他们在微软拥有员工编号,并且最初由Microsoft进行验证。一段时间后,微软将员工赶出去并在他们的系统中将他移除。每次用户登录时,应用程序都应该能够与Microsoft进行核对,以确定索赔是否有效。在这种情况下,它将不再有效。

我会有点生气吗?

+0

嘿。对不起,我不得不删除我的答案,因为我没有足够的时间来解决我的答案,并且在当前状态下,它看起来不像你在找什么......我希望另一个用户能够协助你。 –

+0

马蒂亚斯 - 感谢您的时间 –

回答

1

在这里张贴此为您链接到这个问题from my blog,它可能是有用的人

我想你对一个要求, 这我能理解给定的术语的性质略有误解。您似乎将 'Claim'视为意思是用户'声称'他们拥有某个 属性,并且您想检查这是否属实。

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

用户的身份认证过程中被选中,并在该 点分配的Claims集合了用户对 ClaimsIdentity目的。这是您从 数据库获取索赔的要点,并确保他们只获得他们应该拥有的索赔。 如果您需要有人验证索赔,那么您需要 让整个过程发生在此之外。只有已确认的索赔 应添加到ClaimsIdentity。现在

,有您可以在 CookieAuthenticationMiddleware处理事件时,它 装上以后叫ValidatePrincipal请求验证防伪票证,但我不肯定 如果这实际上你需要的是。

而且你的后续回应:

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

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

所以,我认为设计应该是使用要求系统按照你的优秀文章的 授权属性,但有一个 独立的系统,允许进行验证和饲料 声称系统撤销。

+1

谢谢。我只是在这里发布了一个答案,并在您的博客中引用了您的回复。所以我只是补充一下: Andrew Lock在:[Andrew Lock](https://andrewlock.net)的很好回应。 我试图推动索赔系统做一些它没有设计的事情,因此解决方案是在索赔系统之外写入验证和撤销,并且只包括经过验证的索赔。 请参阅文章和评论:[ASP.NET核心授权介绍](https://andrewlock.net/introduction-to-authorisation-in-asp-net-core/) –