spring-security - 带有集中式数据库的 spring apac
问题描述
我需要为我的庞大用户群提供 ABAC,我想将 ABAC 详细信息保存在 mongodb 等数据库中。
我浏览了这1 2 个 细节,但这些链接讨论了如何在属性文件中制定规则并使用 spring 预授权进行验证。
是否可以将这些 ABC 规则存储在数据库中,并在调用微服务之前在集中的授权服务器中使用它们。
解决方案
假设您使用的是最新版本的 Spring Security,有几种方法可以使用该框架处理授权。我知道的一种方法 - 但不是假装是最好的 - 是实现自定义AccessDecisionVoter,或者,如果 AccessDecisionVoter 不足以满足您的需求,则使用自定义(虽然更复杂)AbstractAccessDecisionManager。您可以在Tim te Beek 的博客上找到有关如何实现、配置和启用您自己的 AccessDecisionVoter 的好教程。然后,在 AccessDecisionVoter 的 vote(...) 方法中,您可以使用授权请求调用外部授权服务器并获得 Permit/Deny 响应。
有一个国际 (OASIS) 标准为这种 ABAC 授权请求/响应以及策略/规则定义了语法/格式和语义:XACML。XACML 还有一个REST Profile,它为基于 XACML 的授权服务器定义了一个 HTTP/REST API;和一个JSON 配置文件,它定义了请求/响应的 JSON 格式作为 XML 的替代方案。因此,XACML 定义了一种将授权外部化到授权服务器的标准方法。
其中一些符合 XACML 的服务器可以将 ABAC (XACML) 策略/规则存储在数据库中,例如带有策略提供程序插件(如 MongoDB 策略提供程序)的AuthzForce RESTful PDP。
推荐阅读
- java - 我的“Runnable”实现无法解析已声明接口的对象上的方法
- r - 错误过滤数据:分面变量必须至少有一个值
- android - 将 Recyclerview 中的所有项目打印为 pdf 文件
- python - 如何获取一个充满文本的标签并将其变成我想要的列表?
- pysimplegui - PySimpleGUI 上 sg.Text 中的变量
- django - Django 多表进行身份验证
- javascript - graphviz/d3 和 python http.server 的未捕获类型错误“this.node() is null”
- sql - SQLite 中 ALL 和 EVERY 的替代方案是什么?
- python - Python:理解函数中的 lambda 操作
- firebase - 如何修复可调用函数中的 Firebase CORS 错误?