【问题标题】:spring security Authentication with Windows AD, Authorization with Spring Security ACL使用 Windows AD 进行 spring security 身份验证,使用 Spring Security ACL 进行授权
【发布时间】:2014-03-06 11:32:41
【问题描述】:

春季安全专家,

我是 Spring Security 的新手,所以如果我的问题不清楚,请多多包涵。

我正在尝试使用 spring security 3.x 实现基于角色的访问控制。个人用户存储在没有组的 Windows AD 中,因此我们不能像一些示例所示的那样简单地将组映射到权限。

所以我的计划是仅使用 Windows AD 进行身份验证,但用户 角色关系由 Spring 安全性本身维护。

但是,将单个用户映射到角色会非常繁琐,所以我的问题是是否可以在 Spring Security 中配置用户 组 角色,但身份验证部分必须由 Windows AD 完成?

由于 spring 安全性非常灵活,我相信我的要求是可以实现的。有人可以指点一下我应该在哪里看吗?

对于像我这样的新手来说,越详细越好:=)

提前谢谢你。

李亚伦


编辑 1:特别要补充我的问题,我可以利用 Spring 数据库表 authority、groups、group_authorities、group_members 来实现一个简单的基于角色的授权逻辑吗?但我不能使用“用户”表,因为之前解释过用户详细信息必须存储在 Windows AD 中,因此需要使用 Windows AD 完成用户身份验证。

有什么建议吗?

谢谢

亚伦

【问题讨论】:

    标签: spring-security acl


    【解决方案1】:

    首先对术语进行一些澄清:Authorities,通常由 Spring Security 中的 roles 组成,是应用程序范围的权限。另一方面,ACL(访问控制列表)指定特定域对象的权限。就像你理解的区别一样。 AD 通常包含权限/角色,但不包含 ACL。

    如果您不想使用 AD 中的权限,您可以自己实现 UserDetailsContextMapper 并将其注入您的 ActiveDirectoryLdapAuthenticationProvider 实例中。请参阅Spring Security reference documentation 如何指定自定义身份验证提供程序。

    如果您想使用参考架构的表(权限等),您可以使用JdbcDaoImpl 加载用户详细信息。然后您必须在用户表中插入用户,但不需要任何密码,因为身份验证是通过 AD 完成的。但是,如果您想摆脱 users 表,则必须自定义实现。

    【讨论】:

    • 是的,我混淆了条款。刚刚阅读了文档,是的,权限是拥有权限的应用程序范围的对象,而 ACL 是域对象。
    • 在这种情况下,从我自己的 UserDetailsContextMapper 实现派生的 UserDetails 如何与定义谁可以做什么的 ACL 一起工作?能详细点吗?
    • 我在原来的问题上又增加了一个问题,你能帮忙吗?
    • @AaronLi 扩展了我的答案。关于 ACL,UserDetailsContextMapper 和 ACL 之间应该没有冲突,只要 UserDetails 填充了正确的用户名(也称为主体)。
    猜你喜欢
    • 2017-05-10
    • 2021-03-19
    • 2012-11-27
    • 1970-01-01
    • 2018-08-09
    • 2012-11-10
    • 2017-04-15
    • 2011-08-14
    相关资源
    最近更新 更多