【发布时间】:2017-07-12 11:57:50
【问题描述】:
我目前正在使用 asp.net 核心设计一个系统,我想实现基于声明的授权,但有一个特定部分让我感到困惑。
提出声明时,声明将包括类型和值以及可选的颁发者。在处理程序中,可以在确认访问之前检查此声明和颁发者。
但是这个 issuer 并没有存储在 Identity db 中,那么处理程序如何检查 issuer?
我是否误解了这一切的运作方式?我的理解是,用户提出某种类型的声明,他们的声明具有一定的价值,而颁发者是声明类型的验证者,实际上对该用户具有该价值。
处理程序将检查该值并可能检查颁发者,但当数据库不存储它时它不能。那我就不明白发行人的意思了。
我希望用户拥有一系列声明,包括验证这些声明的人员/内容,并让应用程序能够随时验证这些声明。
请帮助我理解。
我已经这样测试了:
- 将 asp.net 核心应用与 Identity 结合使用。
- 注册用户。
- 向用户添加包含类型、值和颁发者的声明。 (例如,EmployeeNumber, 312, Microsoft。
- 在控制器/操作上添加 [Authorize(Policy="MicrosoftEmployeesOnly")] 以限制访问。
- 将策略添加到具有要求的 StartUp.cs 中的服务中。
- 添加具有处理程序的要求代码,该处理程序检查用户是否拥有 EmployeeNumber 类型的声明、具有值并且由 Microsoft 发布。
- 登录和用户声明将从数据库加载到身份中。
- 处理程序将无法验证用户,因为颁发者 (Microsoft) 已丢失,现在只显示 Local Authority。
我在这里唯一能想到的是,一旦将声明添加到数据库中,它就会被认为已由 Microsoft 验证,现在由应用程序(本地机构)代表 Microsoft 持有。
如果是这样的话:
- 为什么要在任何处理程序中检查颁发者?
- 如何撤销索赔?
我希望能够随时选择前往该发行人并检查索赔,这意味着发行人可以撤销/无效索赔。该员工声称他们在 Microsoft 拥有员工编号,最初 Microsoft 对此进行了验证。一段时间后,微软将员工踢出并在他们的系统上删除了他。该应用程序应该能够在用户每次登录时与 Microsoft 核对,以查看声明是否有效。在这种情况下,它将不再有效。
我是不是有点生气了?
【问题讨论】:
-
嘿。抱歉,我不得不删除我的答案,因为我没有足够的时间来修复我的答案,而且在目前的状态下,它似乎不是你要找的……我希望其他用户能够为您提供帮助。
-
Matías - 感谢您的宝贵时间
标签: c# asp.net authentication asp.net-core claims-based-identity