首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用LDAP和基于角色的数据库授予权限来实现Security?

如何利用LDAP和基于角色的数据库授予权限来实现Security?
EN

Stack Overflow用户
提问于 2020-05-10 12:17:50
回答 1查看 2.9K关注 0票数 3

我正在一个Spring项目中工作,在这个项目中,具有数据库和基于角色的授予权限的LDAP安全是最终用户必须具备的要求。

我需要什么

  • 主身份验证应由LDAP
  • 用户角色执行,授予权限必须与LDAP用户名

一起配置在数据库中。

示例: LDAP用户: nahid@test.com角色:“管理”角色的管理授予权限: permission_x、permission_y等

将在网页中用作"hasAuthority("permission_x")“。

  • 经过LDAP身份验证后,系统将检查用户是否作为白名单用户
  • 存在于数据库中,在进行白名单检查后,将为用户加载角色和特权,并对加载的权限(非角色)

施加授权。

我在这里发现的是:

现在我的问题是:

  1. 我需要用LDAP用户名存储LDAP密码吗?如果是,安全吗?对于上面的scenario?
  2. Will细粒度授权为LDAP用户工作是否存在

LDAP身份验证和基于jdbc的授权将如何协同工作?有人能帮忙吗?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2020-05-12 20:39:48

既然我找到了解决办法,我就在这里分享我自己的答案。希望它能帮助其他人:

我的答案是:

  1. 没有密码需要存储在数据库中。
  2. 不完全是
  3. 是的,细粒度授权对于LDAP用户(

)非常有效。

我是如何解决问题的:

步骤1:

诀窍是使用普通UserDetailsService.提供的带有UserDetailsUserDetails

示例:

代码语言:javascript
复制
 @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身份验证之后,它将尝试使用所有授权将有效的注册用户加载到上下文中。

步骤2

hasAuthority不是为我工作的。我用了如下所示:

代码语言:javascript
复制
<div sec:authorize="hasRole('SOME_PRIVILEGE')">
            <div class="alert alert-success" role="alert">
                This is secret DIV
            </div>
        </div>

为了进行快速检查,您可以使用以下方法:

代码语言:javascript
复制
<span sec:authentication="principal.authorities"></span>

我希望有一天它能对某人有所帮助。

编码愉快!

编辑: For LDAP over SSL and Spring Boot

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61711828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档