基于角色的访问控制(RBAC)

17

是否有任何Java开源的基于角色的访问控制系统?


你可以尝试使用一个轻量级的授权库,它支持ACL、RBAC和ABAC:https://github.com/casbin/jcasbin - hsluoyz
6个回答

11

9

有几个框架可以为您提供授权系统:

  1. Spring Security
    Spring Security 是一个高度可定制的框架,广泛用于处理 Java 开发的企业级应用程序中出现的身份验证和访问控制(授权)问题。

  2. Apache Shiro
    Apache Shiro 是一个强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理。通过 Shiro 易于理解的 API,您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。

  3. JAAS(Java 身份验证和授权服务)
    JAAS 是一种安全 API,由专门设计用于用户身份验证和授权的 Java 包组成。JAAS 最初作为 Java SE 1.3 中的可选包引入,后来从 JDK 1.4 开始集成到 JDK 中。

  4. OACC
    这个 Java 应用程序安全框架旨在对访问控制进行细粒度(对象级)控制。它的重点是提供完整的 API 来执行和管理应用程序的身份验证和授权需求。它提供了一个灵活而强大的安全模型的完整实现。

  5. jCasbin
    jCasbin 是一个功能强大且高效的开源访问控制库,适用于 Java 项目。它支持基于各种访问控制模型的授权执行。

  6. Keyclock
    Keycloak 是一个面向现代应用程序和服务的开源身份验证和访问管理解决方案。它提供的功能包括单点登录(SSO)、身份代理和社交登录、用户联合、客户端适配器、管理控制台和帐户管理控制台。


3

3
我假设你想回答的问题是:
用户u是否有权限在对象o上执行操作op
需要考虑的一件事是,从业务角度(AC机制之外)如何定义您的域对象和用户组。对于任何RBAC实现,您都需要配置它来告诉您的用户和用户组是什么。这将影响您选择RBAC实现的方式。
另一个(更具体的)问题:您需要支持覆盖权限、包括和排除吗?具体而言,您是否希望能够支持对象o1可供用户组g1使用,但不允许用户u1(属于组g1)使用的情况?
根据具体答案,jguard(构建在JAAS之上)可能是一个非常好的选择- http://jguard.net/

2
有许多可能的解决方案,但哪一个最好(即在不过于沉重或过于复杂的情况下满足您的需求)取决于您的要求:
• 你是在谈论一个网络服务的访问控制,还是其他什么?
• 您要实现什么样的访问控制?仅基于资源URL,还是根据所请求实体的状态/元数据?角色是否简单或分层次?不同的操作是否需要不同的角色?
• 您是否需要处理授权问题?

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接