首页 > 解决方案 > 具有相同凭据的 Spring-security 多重身份验证机制

问题描述

我正在尝试同时使用 2 种授权机制:LDAP 和 DAO。它们按配置顺序工作。如果用户凭据在两种机制中都匹配,则这是不合适的。(例如,在 LDAP 中有一个用户m.smith的密码为qwerty,而在数据库中有一个用户m.smith的密码为qwerty)是否有可能以某种方式传达当前使用哪种机制的标志?在这种情况下,应该忽略另一种机制。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {


    auth
        .ldapAuthentication()
        .contextSource(contextSource)
        .userSearchFilter("(sAMAccountName={0})")
        .userDetailsContextMapper(userDetailsContextMapper);

    auth
        .userDetailsService(userDetailsService)
        .passwordEncoder(passwordEncoder());
}

标签: spring-security

解决方案


如果您有两种完全不相交的机制,那么您可能应该在上层修复它(从 UI 开始)。例如,如果用户使用 LDAP 身份验证,您将发送一个标志(例如 HTTP 标头)来指示要使用的身份验证类型。然后,您可以实现将执行特定类型的身份验证(以编程方式)的自定义过滤器。

我不知道有任何其他解决方案可以在运行时执行您想要的操作。


推荐阅读