在ldif文件中向用户授予ADMIN角色

时间:2017-01-29 17:52:30

标签: spring-security apacheds spring-security-ldap ldif

对于测试环境,我有一个.ldif文件来授予ben用户ADMIN角色,因为我的Spring安全配置需要此角色:{{1} }。

以下是.hasRole("ADMIN").anyRequest()文件内容:

.ldif

测试环境Spring Security配置如下:

dn: ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: groups

dn: ou=people,dc=springframework,dc=org
objectclass: top
objectclass: organizationalUnit
ou: people

dn: uid=ben,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Ben LeHeros
sn: Ben
uid: ben
userPassword: {SHA}nFCebWjxfaLbHHG1Qk5UU4trbvQ=

dn: uid=toto,ou=people,dc=springframework,dc=org
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Toto LeHeros
sn: Toto
uid: toto
userPassword: totopass

dn: cn=adMIN,ou=groups,dc=springframework,dc=org
objectclass: top
objectclass: groupOfNames
cn: ADMin
uniqueMember: uid=ben,ou=people,dc=springframework,dc=org

dn: cn=user,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: user
member: uid=toto,ou=people,dc=springframework,dc=org

有一些观察结果:

1-测试成功,用户通过身份验证并被认可为具有管理员角色。

2-如果不是将角色认证配置为@Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .ldapAuthentication() .userDnPatterns("uid={0},ou=people") .groupSearchBase("ou=groups") .contextSource().ldif("classpath:test-server.ldif"); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable().httpBasic() .authenticationEntryPoint(restAuthenticationEntryPoint).and() .authorizeRequests().antMatchers("/**") .hasRole("ADMIN").anyRequest() .authenticated(); } 而是将其作为.hasRole("ADMIN").anyRequest()进行配置,则不接受测试中给出的用户角色,并且测试失败,而403(不是401)经过认证。

3- .hasRole("admin").anyRequest()文件中的情况似乎并不重要,因为.ldif组可以写为adminadMIN且测试仍然成功。

4-用ADMin组替换admin组,使得测试失败,即403,即用户需要登录管理员角色。

user

为什么dn: cn=user,ou=groups,dc=springframework,dc=org objectclass: top objectclass: groupOfNames cn: user uniqueMember: uid=ben,ou=people,dc=springframework,dc=org 文件中的案例和.ldif方法中的问题无关紧要?

1 个答案:

答案 0 :(得分:1)

根据目录服务器架构(即已定义的属性和对象类),用于构建组条目的可分辨名称(DN)的属性定义为case-ignore(DN“spec”what I would like instead)。

我个人认为它是一个错误, hasRole(..)以区分大小写的方式匹配。但我认为情况就是这样,因为 DefaultLdapAuthoritiesPopulator 默认为 convertToUpperCase true