ABAC 对 Spring Security 或 Apache Shiro 的支持

Posted

技术标签:

【中文标题】ABAC 对 Spring Security 或 Apache Shiro 的支持【英文标题】:ABAC support for Spring Security or Apache Shiro 【发布时间】:2016-12-21 22:52:19 【问题描述】:

我正在尝试找到任何可以与 Spring Security 或 Apache Shiro 框架一起使用的基于属性的访问控制 (ABAC) 范式的开源或商业实现。现在我找不到他们中的任何一个。 我不认为我是第一个需要这种功能的人 - 所以你能推荐支持这个功能的框架吗?

另外,Permissions in Apache Shiro 可以被视为 ABAC 范式实现的一个特例吗?

【问题讨论】:

【参考方案1】:

jCasbin 是一个强大高效的Java项目开源访问控制库。它支持基于各种访问控制模型执行授权。 ABAC 是 jCasbin 支持的模型之一。ABAC:类似于资源的语法糖。所有者可用于获取资源的属性。 在 jCasbin 中,访问控制模型被抽象为基于 PERM 元模型(Policy、Effect、Request、Matches)的 CONF 文件。所以切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用模型来自定义您自己的访问控制模型。例如,您可以在一个模型中同时获取 RBAC 角色和 ABAC 属性,并共享一组策略规则。 它通过插件支持Spring启动:jcasbinspring-boott-plugin

此外,还有另一个名为EasyAback 的开源项目。 (原项目文件是用俄语写的,我翻译了,还添加了一些其他文件和图表link)

【讨论】:

@ColmBhandal 谢谢,我已经更新了链接。【参考方案2】:

This github 示例展示了如何使用 Spring 表达式语言 (SPEL) 在 spring-security 框架之上实现 ABAC。 An excellent blog 使用简单的 Web 应用程序描述示例代码。来自 XACML 背景,我发现这个项目对 XACML 非常熟悉。它本质上映射 XACML 概念以在 JSON(而不是 XACML / XML)中定义策略,并使用熟悉的 spring-security API 和框架。

【讨论】:

【参考方案3】:

对于开源 Java 替代方案,您可以在 XACML Wikipedia page 上找到几个:AuthzForce、Apache OpenAZ、WSO2 Balana。对于 AuthzForce,您可以使用 embedded Java PDP 或(远程)RESTful PDP 找到 ABAC/XACML 授权过滤器的 Java 代码示例。

【讨论】:

【参考方案4】:

免责声明:我为 Axiomatics 工作

Axiomatics 提供与不同环境集成的基于属性的访问控制 (ABAC) 实现:

原生 Spring Security 集成 通过我们的 SDK 和 API 与其他 Java 应用集成 与 API 网关集成,例如Apigee 数据库安全

我们已经让客户与 Apache Shiro 集成。 Apache Shiro 是 ABAC 的简化形式。它们可以与 ABAC 集成。

Axiomatics 的实现依赖于 XACML。

【讨论】:

以上是关于ABAC 对 Spring Security 或 Apache Shiro 的支持的主要内容,如果未能解决你的问题,请参考以下文章

转:权限系统设计模型分析(DAC,MAC,RBAC,ABAC)

ACLRBAC和ABAC:权限系统设计模式

使用 spring security 和/或 shiro 的最佳实践

Spring Security OAuth2 和 Ldap 对同一资源的身份验证

如何使用spring security和java在jwt json中传递角色或权限

RBAC vs ABAC