首页 > 解决方案 > 带有集中式数据库的 spring apac

问题描述

我需要为我的庞大用户群提供 ABAC,我想将 ABAC 详细信息保存在 mongodb 等数据库中。

我浏览了这1 2 个 细节,但这些链接讨论了如何在属性文件中制定规则并使用 spring 预授权进行验证。

是否可以将这些 ABC 规则存储在数据库中,并在调用微服务之前在集中的授权服务器中使用它们。

标签: spring-securityabac

解决方案


假设您使用的是最新版本的 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


推荐阅读