问题标签 [spring-security-acl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2968 浏览

spring - Spring Security 4 ACL 为用户和角色分配权限

我不是 Spring 4 的新手,但我是 Spring Security 4 ACL 的新手。我刚刚在我的 MVC Web 应用程序上实现了 Spring Security 4,它们都是后端 Web 服务。我所做的链接发布在这里:

这增加了我的 URL 的安全性,只有具有特定角色的用户才能请求 URL。这很棒!我们以 SiteMinder 为例,我们没有传回用户名,而是在请求标头中传回了一个令牌。我们调用 OpenAM 并传入这个令牌,然后我们得到一个用户名。我们使用 Hibernate 身份验证从我们的数据库中获取用户信息,我们获取该用户的角色并为我们生成 UserDetails,这样,我们就有了这个经过身份验证的用户的 SecurityContext。

但现在我在同一个 MVC Web 应用程序中面临一个新挑战,那就是我想为我的对象添加 ACL 安全性。我已经做了大量的研究,还有更多的研究要做,我有几个问题。

看来我可以使用 ACL 表应用安全性(创建和/或检索和/或删除和/或更新和/或等)。我想知道是否可以像这样应用安全性:

那么,用户和角色都可以对对象拥有不同的权限吗?

我们有三种不同的对象类型:汽车、动物、花卉。我们希望使用 ACL 来分配用户和角色,以便对这些对象类型中的每一个具有不同的权限。

这可以用 Spring Security 4 中的 ACL 来完成吗?你知道有什么好的例子吗?或者,我们是否必须拥有所有用户权限?所以如果我们的角色有 3 个用户,那么我们需要在 acl 表中有 3 个条目,每个用户一个?这就引出了一个问题……如果用户更改了角色,那么我们将不得不重新评估他们的权限,并且我们可能不得不在 ACL 表中添加或删除记录?

我也在研究权限是如何工作的。我们目前在旧系统中使用位掩码来跟踪权限,所以我们有 recursiveRead (1)、read (2)、write(4)、delete(8)、create(16)、upload(32)、 close(64) 等。似乎我们可以拥有 32 位权限,这对我们来说非常有用。

所以,我正在研究我们如何在 ACL 中定义这些权限。

当我获得更多信息时,我一定会在这里发布。谢谢!

0 投票
1 回答
5735 浏览

performance - Spring安全访问控制列表数十亿行

基于 Spring Security 框架特别是其 acl 模块实现安全解决方案。
应用程序中有数百万个域对象和数百个用户。

使用 Spring Security Acl 模块,acl_sid 和其他相关表中的条目会增长到数十亿,这会影响应用程序的性能。

想知道处理这种情况的最佳实践。

是否有任何可用的替代安全框架可以有效地处理类似情况。

0 投票
1 回答
671 浏览

spring-security - 春季安全acl id

我正在尝试实现 Spring Security ACL,但它抱怨我的对象没有 id 属性

即使我的对象实现

这就是我尝试测试 hasPermission 的方式

是否必须拥有财产 ID?

0 投票
1 回答
1339 浏览

spring - 使用 OAuth 时如何为不同类型实现 Spring Security @PostFilter

我在我的项目中使用 Spring Boot、Spring Security Oauth 和 Spring Security,这是一个ResponseEntity<>从它的控制器方法返回的 REST 服务器。

现在,当我将@PostFilter注释添加到返回ResponseEntity<Iterable<WebUser>>执行随后失败的控制器方法时,因为方法filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx)只能与类型CollectionArray. 它无法从 ResponseEntity 中提取集合。

现在我的答案是通过DefaultMethodSecurityExpressionHandler从 ResponseEntity 中提取并通过扩展和覆盖该方法的@EnableGlobalMethodSecurity类来使用它来扩展实现过滤器方法。GlobalMethodSecurityConfigurationcreateExpressionHandler()

如果我不使用 Spring Security OAuth,上面的方法会起作用,因为我发现OAuth2MethodSecurityConfiguration创建它自己的OAuth2MethodSecurityExpressionHandler并且我的自定义的然后没有被创建。

解决方案是将整个OAuth2MethodSecurityConfiguration类复制到我的项目中并更改一行以使其创建MyOAuth2MethodSecurityExpressionHandler extends OAuth2MethodSecurityExpressionHandler提取的ResponseEntity但这个解决方案对我来说似乎有点 hacky。

所以,最后对于这个问题,我想问一下是否有更好的方法来解决这个问题。也许我从一个不好的角度去做,错过了一个更直接的解决方案。

编辑:解决这个问题当然也是一种选择,但我主要是在寻找其他(更清洁)的方式来配置 Spring @PostFilter 以与 ResponseEntity<> (如果有的话)一起更好地理解 Spring Boot 的整体。

0 投票
2 回答
1130 浏览

spring-security - 如何实现 ACL spring security 以在用户组之间共享对象而不在 ACL_Entry 表中创建许多条目

类似于下面提到的问题 如何在组级别实现 ACL?例如,只有 A 学校的老师可以更新 A 学校的日历

我正在尝试使用 acl spring security 解决以下场景

我们有一个场景将学生的结果分享给教师组。在这种情况下,当老师登录时,只有当老师对 Result 对象具有读取权限时,他才能看到结果。如果我们需要将结果分享给有 10 个成员的教师组在具有读取权限的组中,我们需要在 ACL_Entry 表中提供 10 个整体。这会很复杂,因为条目会随着组成员的增加和权限的增加而增加。有没有其他方法可以让我将结果分享给组只有一个 acl 条目的组对结果对象具有读取权限,教师应该自动获得读取该对象的权限。您还可以举例说明架构是如何的。

请帮忙

0 投票
0 回答
1697 浏览

java - Spring Security ACL & OAuth:AclPermissionEvaluator 被 DenyAllEvaluator 覆盖

因此,按照本教程http://krams915.blogspot.com/2011/01/spring-security-3-full-acl-tutorial,我有一个使用 spring-security-acl(版本 3.2.7.RELEASE)的带有 JavaConfig 的 SpringBoot 应用程序.html除了我也在使用 OAuth。问题是 AclPermissionEvaluator 在运行时总是被 DenyAllPermissionEvaluator 替换。

TLDR;如何让 spring-security-acl 与 OAuth2Authentication 一起使用?每个都需要 @EnableGlobalMethodSecurity 但在不同的位置(GlobalMethodSecurityConfiguration 子类上的 acl 和应用程序上的 OAuth2)。但是,您不能将其定义两次。与此类似,但使用 OAuth2:如何在没有 XML 文件的情况下配置 Spring ACL

pom.xml

SpringBoot 应用程序

Java 配置

控制器

当我在运行时调试/逐步执行DefaultMethodSecurityExpressionHandler时,我可以说权限评估器始终是DenyAllPermissionEvaluator(而不是AclPermissionEvaluator),因为创建了新的 MethodSecurityEvaluationContext 。

请注意,我没有也不需要@EnableWebSecurity。

另外,我强烈怀疑这是因为我有 @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)。

定义了两次,但是当我将其从 Application.java 中取出并运行应用程序(mvn spring-boot:run)时,它无法启动并出现以下错误:

有谁知道如何让两个人一起玩得好?

0 投票
1 回答
808 浏览

spring-security - @Post Filter 没有使用 acl 和 oauth spring security 过滤方法返回的集合

我正在尝试集成 Oauth 安全性和 acl spring 安全性。

而不是低于 oauth 表达式处理程序

我在配置之后使用了 acl 表达式处理程序

http://krams915.blogspot.in/2011/01/spring-security-3-full-acl-tutorial_30.html中所述。

我可以在表中创建 acl 条目。但是在使用 @PostFilter 时,该方法返回的对象没有使用 acl 权限进行过滤。

有人可以帮忙吗

0 投票
1 回答
298 浏览

spring-mvc - Spring Security - ACL readAclsById not filtering by SIDs

I'm trying to use Spring Security's readAclsById method in JdbcMutableAclService to retrieve ACLs that are filtered by the SIDs. However, ACLs that are not applicable to the passed-in SIDs are returned.

I'm creating the ACL entry using the username:

And I'm retrieving ACLs via the Authentication object:

If I log into another username and try to retrieve the ACLs via readAclsById, I also get AccessControlEntry values that belonged to the other usernames. Am I using AclService correctly?

0 投票
0 回答
1493 浏览

spring-security - 始终使用 DefaultWebSecurityExpressionHandler

我有一个 spring-boot Web 应用程序,它通过这个类声明一些安全性:

一切正常。我还将这些注释添加到我的一些服务方法中:

现在他们做的不多——这很好。但现在我使用以下配置创建 jar 文件:

这个 jar 中有一个spring.factories文件,META-INF以便加载作为 spring-boot 应用程序@Configuration。现在我希望当我在类路径中包含这个 jar 时,@PreAuthorize注释开始工作。但是我看到的是它AbstractSecurityExpressionHandler被调用并调用了抽象方法,该方法createSecurityExpressionRoot(authentication, invocation);总是去DefaultWebSecurityExpressionHandler而不是去DefaultMethodSecurityExpressionHandler. 当我的应用程序启动时,我可以看到它DefaultMethodSecurityExpressionHandler是构造的,所以我真的不确定这里会发生什么。

编辑:这是我的spring.factories文件: org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.nemesis.platform.module.personalization.core.config.PersonalizationConfig

0 投票
1 回答
149 浏览

spring - Spring Security 4 ACL - 用户创建和数据库配置

我正在将 Spring Security 实施到现有应用程序中,该应用程序通过 Web 门户创建用户、分配角色等。在为 Web 服务和门户寻找最合适的安全性的过程中,Spring Security 的 ACL 给我留下了深刻的印象。但是我有这个基本的疑问。

SS4 中的 ACL 可以通过数据库进行配置。找到了一个帮助我实现相同目标的教程,但我觉得这种配置方式需要大量的硬连接到数据库中,因为它完全是数据驱动的。每个用户在创建时都需要一组允许/限制的域对象级别访问(将数据行插入和更新到 acl 表中),并且需要为每个用户重复此操作。这比通过数据库的数据驱动方法更容易在代码中使用@PreAuthorize 和@PostAuthorize 注释(通过SPEL)实现。

是否可以根据分配给它们的角色在数据库中配置 ACL,而不是为每个用户定义每个对象的访问权限?