我目前正在设计一个使用asp.net核心的系统,我想实现基于声明的授权,但有一个特殊部分令我感到困惑。
在提出索赔时,索赔将包括类型和价值以及可选的发行人。在处理程序中,可以在确认访问权限之前检查此声明和发行者。
然而,此发行者未存储在Identity db中,那么处理程序如何检查发行者?
我是否误解了这一切是如何运作的?我的理解是,用户提出某种类型的声明,他们的声明属于某个值,而发行者是声明类型的验证者,实际上具有该用户的该值。
处理程序将检查值并可能检查发布者,但它不能在db不存储它时。那时我不明白发行人的意思。
我希望用户拥有一系列声明,包括谁/什么验证这些声明以及应用程序,以便随时验证这些声明。
请帮助我理解。
我已经对此进行了测试:
我唯一可以想到的是,一旦将声明添加到数据库中,它就会被Microsoft认证,现在由代表Microsoft的应用程序(Local Authority)持有。
如果那是真的那么:
我希望能够随时选择去发行人并随时检查索赔,这意味着发行人可以撤销/使索赔无效。该员工声称他们在Microsoft拥有员工编号,并且最初Microsoft会对此进行验证。一段时间后,微软将员工踢出去,他们的系统将他删除。每次用户登录时,应用程序都应该能够与Microsoft核实,以查看声明是否有效。在这种情况下,它将不再有效。
我有点生气吗?
答案 0 :(得分:1)
当您链接到此问题from my blog时,在此处发布此信息,这可能对某人有用
我认为您对某项索赔的性质略有误解, 鉴于术语,我可以理解。你好像在服用 '根据权利要求'用户的意思是“自称”。他们有一定的 属性,并且您想要检查这是否为真。
这不是声明在这里工作的方式。索赔基本上是 '属性'用户。以旧的方式处理角色,用户 将属于一定数量的角色。这些只是属性' 用户现在有,所以更通用。用户可能有多个 与他们所处角色相对应的声明。
在身份验证期间检查用户的身份,并在此处进行检查 指向您分配用户所拥有的
Claims
集ClaimsIdentity
对象。这是您从中获取声明的要点 数据库,并确保他们只获得他们应该拥有的数据库。 如果您需要某人验证声明,那么您需要 让整个过程发生在这之外。只有索赔 已确认的内容应添加到ClaimsIdentity
。现在,你可以处理一个事件
CookieAuthenticationMiddleware
验证安全票证 在后续的名为ValidatePrincipal的请求中加载,但我不是 确定这是否真的是你需要的。
随后的回复:
感谢您的回复。我现在明白这些说法是 一旦他们进入数据库,就会有效地验证声明。我想他们 可以从数据库中删除,作为撤销声明的一种方式。
但是,我认为,正如你的建议,最好的方法是拥有这个系统 在外面,它只是在需要时提供索赔。该设计 是应用程序将具有不同类型的帐户 实体和账户将能够提出索赔,例如"我 我是父母"。父母将寻求授权帐户进行验证 这个。这可能需要授权帐户持有人实际 在验证之前查看一些真实的文档。其他索赔,可以 更改。例如,父母责任的父母需要一个 更多的验证,但也可能失去父母的责任 在现实世界中,因此需要撤销索赔的设施 可用。
所以,我认为设计应该是使用索赔系统 根据你的优秀文章授权属性,但有一个 单独的系统,允许验证和撤销该Feed 声称系统。