在我工作的公司;我们正在计划一个自定义授权服务(使用 Open Policy Agent 作为策略引擎)来进行细粒度的 authZ 决策。
基本上,启用授权的微服务将身份(JWT 主题)、操作(GET/POST/PUT/PATCH/DELETE)和资源(/thing/12345
)传递给授权服务以获得 authZ 决策。该决定只是一个布尔允许/拒绝响应。权利保留有关用户、组和角色的信息(它从 IDP 和其他系统异步接收),因此它能够从其本地数据源中查找此信息并将其传递给 OPA(使用重载输入模式)。权利/OPA 只是作为独立服务运行 - 我们不会将 OPA 作为边车或任何类似的东西运行......
我们试图解决的问题是,对于大多数路由,资源所有者不是资源路径的一部分,但我们仍然需要资源所有者能够做出 authZ 决定。
我可以想出 3 种方法让资源所有者获得权利。我正在寻求一些关于什么是最好的方法的建议。
- 在所有资源路径中包括资源所有者信息,例如
/user/{id}/thing/12345
. TBH 不确定这种方法在我们的生态系统中的可行性,所以这可能是我最不喜欢的。 - 启用权利的服务需要查找资源所有者(针对给定资源)并将其传递给权利(连同身份、操作和资源)。
- 在创建资源时将资源标识符(映射到资源所有者)同步到授权,以便启用授权的服务随后只需传递身份、操作和资源即可获得 authZ 决策。