为了账号安全,请及时绑定邮箱和手机立即绑定

LDAP:在身份验证事件期间获取自定义值

LDAP:在身份验证事件期间获取自定义值

眼眸繁星 2022-12-15 16:07:36
我让 Springboot 成功地对 LDAP 进行了身份验证并向视图添加了一个CustomUserDetails模型。在身份验证活动期间,我还想带回其他详细信息,如电子邮件、电话和城市。根据this SO answer,这是可能的,我认为这也解决了这个问题。尽管阅读了这两个答案,但我仍然不确定如何继续执行此操作 - 特别是关于第二个答案的步骤 2 和 3 如何关联,以及电子邮件、城市和电话等详细信息映射到哪里?我的安全等级:安全@SpringBootApplicationpublic class ApplicationSecurity extends WebSecurityConfigurerAdapter {@Autowiredprivate UserDetailsService userDetailsService;@Overridepublic void configure(HttpSecurity http) throws Exception {    http            .authorizeRequests()                .anyRequest().fullyAuthenticated()                .and()            .formLogin()                .defaultSuccessUrl("/newExhibit");}@Overridepublic void configure(AuthenticationManagerBuilder auth) throws Exception {    auth            .userDetailsService(userDetailsService)            .and()            .ldapAuthentication()            .userDnPatterns("uid={0},ou=people")            .groupSearchBase("ou=groups")            .contextSource()            .url("ldap://localhost:8389/dc=springframework,dc=org")            .and()            .passwordCompare()            .passwordEncoder(passwordEncoder())            .passwordAttribute("userPassword");}我的用户对象来自 test-server.ldifdn: uid=abc123,ou=people,dc=springframework,dc=orgobjectclass: topobjectclass: personobjectclass: organizationalPersonobjectclass: inetOrgPersoncn: Tom Smithsn: Smithuid: abc123userPassword: passmail: tom@contoso.commobile: +212 307 12345st: CA
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

查看您的 LDIF 文件,您似乎正在尝试获取定义为inetOrgPerson的一部分的属性。Spring Security 为这个InetOrgPersonContextMapper. 这会将定义的属性映射到InetOrgPerson,这将根据UserDetails需要进行操作。

要配置您只需要创建一个新实例并将其连接到您的配置。

@SpringBootApplication

public class ApplicationSecurity extends WebSecurityConfigurerAdapter {



@Override

public void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth

      .ldapAuthentication()

        .userDnPatterns("uid={0},ou=people")

        .groupSearchBase("ou=groups")

        .contextSource()

        .url("ldap://localhost:8389/dc=springframework,dc=org")

        .and()

        .userDetailsContextMapper(new InetOrgPersonContextMapper())

        .passwordCompare()

        .passwordEncoder(passwordEncoder())

        .passwordAttribute("userPassword");

}

这将相应地映射属性。当您使用 LDAP 时,您不需要UserDetailsService注入,因为它会自动配置LdapUserDetailsService底层。


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信