C# 如何管理用户声明?

C# 如何管理用户声明?,c#,asp.net,authentication,asp.net-core,claims-based-identity,C#,Asp.net,Authentication,Asp.net Core,Claims Based Identity,我目前正在设计一个使用asp.net内核的系统,我想实现基于声明的授权,但有一个特定的部分让我感到困惑 当提出索赔时,索赔将包括类型和值,以及可选的发卡机构。在处理程序中,可以在确认访问之前检查该声明和发卡机构 但是,该颁发者不存储在标识数据库中,那么处理程序如何检查该颁发者 我是不是误解了这一切是怎么回事?我的理解是,用户提出某种类型的声明,他们的声明具有一定的价值,而发行人是声明类型的验证者,实际上对该用户具有该价值 处理程序将检查该值,并可以检查颁发者,但当db不存储该值时,它无法进行检查

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

当提出索赔时,索赔将包括类型和值,以及可选的发卡机构。在处理程序中,可以在确认访问之前检查该声明和发卡机构

但是,该颁发者不存储在标识数据库中,那么处理程序如何检查该颁发者

我是不是误解了这一切是怎么回事?我的理解是,用户提出某种类型的声明,他们的声明具有一定的价值,而发行人是声明类型的验证者,实际上对该用户具有该价值

处理程序将检查该值,并可以检查颁发者,但当db不存储该值时,它无法进行检查。我不明白发行人的意思

我希望用户拥有一组声明,包括谁/什么验证了这些声明,并且应用程序可以随时验证这些声明

请帮我理解

我对此进行了测试,如下所示:

  • 使用具有标识的asp.net核心应用程序
  • 注册一个用户
  • 向用户添加包含类型、值和颁发者的声明。(例如,EmployeeNumber,312,微软
  • 在控制器/操作上添加[Authorize(Policy=“MicrosoftEmployeesOnly”)]以限制访问
  • 将策略添加到StartUp.cs中的服务中,并添加一个要求
  • 添加具有处理程序的需求代码,该处理程序检查用户是否具有EmployeeNumber类型的声明、是否具有值以及是否由Microsoft发布
  • 登录和用户声明将从db加载到标识中
  • 处理程序将无法验证用户,因为颁发者(Microsoft)已丢失,现在只显示为Local Authority
  • 我在这里能想到的唯一一件事是,一旦索赔被添加到db中,它被认为是由Microsoft验证的,现在由代表Microsoft的应用程序(地方当局)持有

    如果这是真的,那么:

  • 为什么要在任何处理程序中检查发卡机构
  • 如何撤销索赔
  • 我希望能够选择随时前往该发行人并检查该声明,这意味着发行人可以撤销/使该声明无效。该员工声明他们在Microsoft拥有员工编号,并且最初由Microsoft验证。一段时间后,Microsoft将该员工踢出并在其系统上删除他应用程序应该能够在用户每次登录时向Microsoft检查声明是否有效。在这种情况下,声明将不再有效


    我是不是有点疯了?

    在你链接到这个问题的时候,把这篇文章发到这里,它可能对某些人有用

    我想你对索赔的性质有点误解, 从术语上我能理解,你似乎在 “Claim”表示用户“声称”他们有某种 属性,并且您希望检查这是否为真

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

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

    现在,您可以在上处理一个事件
    CookieAuthenticationMiddleware
    用于验证安全票证 在名为ValidatePrincipal的后续请求中加载,但我没有 当然,如果这是你真正需要的

    以及你随后的回应:

    谢谢你的回复。我现在知道这些索赔是 一旦他们进入db,有效地核实了索赔。我想他们 可以从db中删除,作为撤销索赔的一种方式

    然而,我认为,正如你所建议的,最好的办法是建立这个系统 它只是在需要时提供声明 应用程序将拥有不同类型的帐户 实体和账户将能够提出索赔,例如“I “我是家长”。家长将寻求授权帐户进行验证 这可能需要授权账户持有人 在验证之前,请查看一些真实的文档。其他声明,可以 改变。例如,有父母责任的父母需要 更多的验证,但也可能失去父母的责任 在现实世界中,因此需要建立一个撤销索赔的机制 可用

    因此,我认为设计应该是使用索赔系统 授权属性跟随你的优秀文章,但要有一个 单独的系统,允许验证和撤销馈送 这就是索赔制度


    嘿。对不起,我不得不删除我的答案,因为我没有足够的时间来修正我的答案,而且在当前的状态下,它似乎不是你想要的…我希望其他用户能够帮助你。Matías-无论如何谢谢你的时间谢谢你。我只是在这里发布了一个答案,在你的博客上引用了你的回复。所以我will只是补充:Andrew Lock的回复很好:。我试图推动索赔系统做一些它不是设计用来做的事情,因此解决方案是在索赔系统之外编写验证和撤销,并且只包含索赔