如何通过数据库的LDAP和基于角色的授权实现Spring安全?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过数据库的LDAP和基于角色的授权实现Spring安全?相关的知识,希望对你有一定的参考价值。
我在一个Spring MVC Thymeleaf项目中工作,在这个项目中,带有数据库和基于角色的授权的LDAP安全是终端用户必须具备的要求。
我需要的是
- 主要认证应该由LDAP执行
- 用户角色和授予的权限必须与LDAP用户名一起在数据库中配置。
example: LDAP user: nahid@test.com Role: Admin Granted Authorities for "Admin" role: permission_x,permission_y etc
这将在网页中使用 "hasAuthority("permission_x")"
- LDAP认证后,系统会检查数据库中是否存在白名单用户。
- 在白名单检查后,将为用户加载角色和权限,并对加载的权限(不是角色)进行授权。
我找到的是这里。
春季安全与LDAP和数据库角色,这是一个有点过时的
https:/spring.ioguidesgsauthenticating-ldap。 其中只显示LDAP认证。
- https:/www.baeldung.comrole-and-privilege-for-spring-security-registration 授予权力的例子
现在我的问题是。
- 我需要把LDAP密码和LDAP用户名一起存储吗?如果需要,它安全吗?
- 有没有针对上述情况的例子?
- 对于LDAP用户,细粒度的授权能不能用?
LDAP认证和基于jdbc的授权如何协同工作?
先谢谢你
答案
既然我已经找到了解决方案,我在这里分享我自己的答案。希望能帮助到其他人。
我的答案是:
- 没有密码需要存储在数据库中。
- 不完全是
- 是的,细粒度的授权对LDAP用户来说是完美的。
我是如何解决我的问题的。
第一步
诀窍是用一个 UserDetailsContextMapper 与 用户详情 由经常性的 用户详情服务.
例如,在LDAP认证成功后,它将尝试将有效的注册用户加载到具有所有授权的上下文中。
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDetailsContextMapper(userDetailsContextMapper())
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url("ldap://localhost:8389/dc=springframework,dc=org")
.and()
.passwordCompare()
.passwordEncoder(new BCryptPasswordEncoder())
.passwordAttribute("userPassword");
}
@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
return new LdapUserDetailsMapper() {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
UserDetails details= userDetailsService.loadUserByUsername(username+"@test.com");
return details;
}
};
}
在LDAP认证成功后,它将尝试加载有效的注册用户到上下文中,并授予所有的权限。
第二步
有权 对我没用。我已经用了类似下面的东西。
<div sec:authorize="hasRole('SOME_PRIVILEGE')">
<div class="alert alert-success" role="alert">
This is secret DIV
</div>
</div>
为了快速检查,你可以用下面的方法。
<span sec:authentication="principal.authorities"></span>
我希望有一天它能帮到你。
编码快乐!
以上是关于如何通过数据库的LDAP和基于角色的授权实现Spring安全?的主要内容,如果未能解决你的问题,请参考以下文章