Oauth 2.0 如何使用OAuth2/OpenId执行复杂的规则系统?

Oauth 2.0 如何使用OAuth2/OpenId执行复杂的规则系统?,oauth-2.0,openid,claims-based-identity,identityserver3,Oauth 2.0,Openid,Claims Based Identity,Identityserver3,我正在研究构建一个REST服务作为后端,我正在研究OAuth2/OpenId来处理安全性,但我不确定如何将我的复杂结构适应规则或范围结构 还没有构建任何东西,所以可能我的推理是错误的,可以修改域模型以满足我的需要,或者OAuth2/OpenId不适合我 我有一个域模型,如下所示: 一个国家 与国家相关的地区。一个国家拥有多个地区,但一个地区只属于一个国家 一种产品,链接到一个国家或地区(可选) 可以对产品执行的操作。(与产品没有直接联系,而是与积垢相关的东西。) 一个档案,链接到一个国家(可选

我正在研究构建一个REST服务作为后端,我正在研究OAuth2/OpenId来处理安全性,但我不确定如何将我的复杂结构适应规则或范围结构

还没有构建任何东西,所以可能我的推理是错误的,可以修改域模型以满足我的需要,或者OAuth2/OpenId不适合我

我有一个域模型,如下所示:

  • 一个国家
  • 与国家相关的地区。一个国家拥有多个地区,但一个地区只属于一个国家
  • 一种产品,链接到一个国家或地区(可选)
  • 可以对产品执行的操作。(与产品没有直接联系,而是与积垢相关的东西。)
  • 一个档案,链接到一个国家(可选一个地区),并保存行动列表
  • 链接到一个或多个配置文件的用户
用户可以请求产品列表。在这些产品上,他可以根据个人资料允许的内容执行操作,因此,如果产品的国家/地区与个人资料国家/地区匹配

想象一下:

Product | Country | Region
--------------------------
      A |       X |      Z
      B |       X |      Y

Profile | Country | Region | Action
-----------------------------------
      I |       X |      Z | UPDATE
      I |       X |      Z | DELETE
      J |       X |      Y | DELETE
用户链接到配置文件I和J

  • 如果用户选择产品A,则允许用户更新产品,因为国家X和地区Z匹配
  • 如果用户选择产品B,则不允许用户更新产品,因为即使国家X匹配,地区Y也不匹配配置文件I
这就是我的问题。我不太明白如何使用OAuth2/OpenId提供的基本规则和范围来实现这个复杂的规则系统。大多数示例使用一个非常简单的概念,基本CRUD是否允许,但我需要另一个层次结构

简单地使用系统对用户进行身份验证,然后每次仍然必须执行深入的操作验证调用,这似乎是一种开销。然后,我可以跳过OAuth2/OpenId并执行我自己的验证


或者,是否有其他方法可以对我的需求进行建模,以符合OAuth2/OpenId的概念?

我会将所有这些信息(国家、地区、概况、行动)放在正如ClaimsPrincipal中的Clam,然后使用来自当前用户声明的信息来检测是否具有用户权限来执行操作

OpenID Connect是一种身份验证协议,位于更通用的令牌请求协议OAuth 2.0之上

它们与您如何实施授权/业务规则无关

此外,OIDC/OAuth的结果是标识数据、作用域以及粗粒度标识数据。
ClaimsPrincipal
不是任意授权数据的倾倒地

授权是基于传入的身份进行的,没有专门的“技术”或“协议”。一种流行的方法是“基于资源的授权”。这已内置到新的asp.net核心中,但在其他方面并不难自己实现


基于资源的授权似乎是在服务器端处理事情的一个很好的解决方案。不幸的是,它仍然留给我一个问题,即如何在客户端处理这个问题。如果用户在表中选择了一行,我想更新UI操作按钮,而不必每次调用REST服务,询问“我有权限吗?”。有什么建议吗?我不做太多的客户开发。我的主要观点是-这与OAuth/OpenId连接无关,但前提是来自客户端的每个操作/请求都必须在服务器上进行双重检查(例如,此用户是否可以对该表中的此行执行此操作?),请重新检查。客户端:当服务器首次向客户端提供表格数据(无论是一个充满数据的MVC视图,还是一个返回JSON的RESTAPI)时,该表格数据还应该包含该用户允许的每一行操作。然后Razor模板或JS SPA有责任不允许在这些行上执行这些操作