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

时间:2016-02-17 20:40:58

标签: oauth-2.0 openid claims-based-identity identityserver3

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

还没有构建,所以也许我的推理是错误的,可以修改域模型以满足我的需求,或者OAuth2 / OpenId不适合我。

我有一个域模型如下:

  • 国家/地区
  • 区域,链接到国家/地区。单个国家/地区包含多个区域,但区域仅属于一个国家/地区。
  • 产品,链接到一个国家/地区,也可选择一个地区。
  • 可以在产品上执行的操作。 (不直接与产品相关联,而是与CRUD相关的东西。)
  • 一个个人资料,它链接到一个国家/地区,可选择一个地区,并保存一系列操作。
  • 用户,链接到一个或多个个人资料。

用户可以请求产品列表。在这些产品上,他可以根据其配置文件允许的内容执行操作,因此,如果产品的国家/地区与配置文件国家/地区匹配。

想象:

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的概念吗?

2 个答案:

答案 0 :(得分:1)

OpenID Connect是一种基于更通用的令牌请求协议OAuth 2.0的身份验证协议。

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

此外,OIDC / OAuth的结果是身份数据,范围和粗粒度身份数据。 ClaimsPrincipal 是任意授权数据的转储基地。

授权是根据传入的身份完成的,没有特殊的“技术”或“协议”用于它。一种流行的方法是“基于资源的授权”。这已被内置到新的asp.net核心 - 但其他方面并不难实现。

https://docs.asp.net/en/latest/security/authorization/resourcebased.html

答案 1 :(得分:0)

我会将所有这些信息(国家,地区,个人资料,操作)作为声明放入ClaimsPrincipal中,然后使用来自当前用户声明的信息来检测是否具有用户权限或不执行操作