我正在考虑构建一个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.
这是我的问题。我不太明白如何使用OAuth2 / OpenId提供的基本规则和范围来实现这个复杂的规则系统。大多数样本使用一个非常简单的概念,基本的CRUD允许与否,但我需要另一个层次级别。
只需使用系统对用户进行身份验证,然后每次都需要执行深入的操作验证调用。然后我可能只是跳过OAuth2 / OpenId并执行我自己的验证。
还是有另一种方法可以模拟我的需求以适应OAuth2 / OpenId的概念吗?
答案 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中,然后使用来自当前用户声明的信息来检测是否具有用户权限或不执行操作