通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查

Posted

技术标签:

【中文标题】通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查【英文标题】:Authenticate via spring LDAP with additional security check in database 【发布时间】:2013-09-15 06:54:10 【问题描述】:

LDAP 身份验证后,我想检查数据库中的用户 ID 是否列在用户表中。

我怎样才能做到这一点?我在 Google 上看到的只是通过 LDAP 进行的身份验证和数据库上的用户角色检索。

【问题讨论】:

【参考方案1】:

你必须改变你拥有用户 Prancipal 的方式:

你会保留你的 ldapProvider :

<beans:bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">   

....

<beans:bean id="customUserDetailsMapper" class="xxxxx.CustomUserDetailsMapper">
    <beans:constructor-arg ref="customUserDetailService" />
</beans:bean>

<beans:bean id="customUserDetailService" class="xxxxxx.CustomUserDetailService">
</beans:bean>

定义一个自定义的 UserDatailsMapper :

public class CustomUserDetailsMapper extends LdapUserDetailsMapper 

private UserDetailsService userDetailService;

public CustomUserDetailsMapper (UserDetailsService userDetailService) 
    this.userDetailService = userDetailService;


@Override
public UserDetails mapUserFromContext(DirContextOperations ctx,
        String username, Collection<? extends GrantedAuthority> authorities) 

    return (UserDetails) this.userDetailService.loadUserByUsername(username);

并定义一个自定义 UserDetailsS​​ervice :

public class CustomUserDetailService implements UserDetailsService 


@Autowired
protected UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException 
    UserDb user = userRepository.findByUserName(username);

    if (UserDb  == null) 
        throw new UsernameNotFoundException(username);
               

    // Construct customUserDetails

    return (UserDetails)customUserDetails;

【讨论】:

我是 Spring Security 的新手,所以我很欣赏一些解释。 UserDetails 来自哪里? org.springframework.security.core.userdetails.UserDetails 这是spring security的核心接口 @SciasTwentyThree 你好,SciasTwentyThree 你实现目标了吗?我正在为 LDAP 身份验证后的数据库层寻找类似的严格安全性,如果您能分享您的答案,那就太好了 - 谢谢

以上是关于通过 spring LDAP 进行身份验证,并在数据库中进行额外的安全检查的主要内容,如果未能解决你的问题,请参考以下文章

通过 Spring security ldap 对用户进行身份验证时未授予任何权限错误

使用 Spring Security 3 进行 LDAP 身份验证

Spring Security:针对多个 LDAP 服务器和基于 DAO 的身份验证进行身份验证

Spring 安全切换到 Ldap 身份验证和数据库权限

使用 CAS 进行身份验证和 LDAP 进行授权的 Spring 项目

通过spring security进行的Active Directory身份验证会返回由LDAP引起的有效用户的错误凭据:错误代码49