如何管理用户声明?

时间:2017-02-22 12:24:29

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

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

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

然而,此发行者未存储在Identity db中,那么处理程序如何检查发行者?

我是否误解了这一切是如何运作的?我的理解是,用户提出某种类型的声明,他们的声明属于某个值,而发行者是声明类型的验证者,实际上具有该用户的该值。

处理程序将检查值并可能检查发布者,但它不能在db不存储它时。那时我不明白发行人的意思。

我希望用户拥有一系列声明,包括谁/什么验证这些声明以及应用程序,以便随时验证这些声明。

请帮助我理解。

我已经对此进行了测试:

  1. 使用带有身份的asp.net核心应用程序。
  2. 注册用户。
  3. 向包含类型,值和发布者的用户添加声明。 (例如,EmployeeNumber,312,Microsoft。
  4. 在控制器/操作上添加[授权(策略=" MicrosoftEmployeesOnly")]以限制访问。
  5. 使用要求将策略添加到StartUp.cs中的服务中。
  6. 添加需求代码,该代码具有检查用户具有EmployeeNumber类型声明的处理程序,具有值并由Microsoft发布。
  7. 登录并且用户声明将从数据库加载到标识中。
  8. 处理程序将无法验证用户,因为发行人(Microsoft)已丢失,现在只是说地方当局。
  9. 我唯一可以想到的是,一旦将声明添加到数据库中,它就会被Microsoft认证,现在由代表Microsoft的应用程序(Local Authority)持有。

    如果那是真的那么:

    1. 为什么要在任何处理程序中检查发行者?
    2. 你如何撤销索赔?
    3. 我希望能够随时选择去发行人并随时检查索赔,这意味着发行人可以撤销/使索赔无效。该员工声称他们在Microsoft拥有员工编号,并且最初Microsoft会对此进行验证。一段时间后,微软将员工踢出去,他们的系统将他删除。每次用户登录时,应用程序都应该能够与Microsoft核实,以查看声明是否有效。在这种情况下,它将不再有效。

      我有点生气吗?

1 个答案:

答案 0 :(得分:1)

当您链接到此问题from my blog时,在此处发布此信息,这可能对某人有用

  

我认为您对某项索赔的性质略有误解,   鉴于术语,我可以理解。你好像在服用   '根据权利要求'用户的意思是“自称”。他们有一定的   属性,并且您想要检查这是否为真。

     

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

     

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

     

现在,你可以处理一个事件   CookieAuthenticationMiddleware验证安全票证   在后续的名为ValidatePrincipal的请求中加载,但我不是   确定这是否真的是你需要的。

随后的回复:

  

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

     

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

     

所以,我认为设计应该是使用索赔系统   根据你的优秀文章授权属性,但有一个   单独的系统,允许验证和撤销该Feed   声称系统。