【问题标题】:Spring security: ldap configurationSpring 安全性:ldap 配置
【发布时间】:2019-04-03 12:51:02
【问题描述】:

我在使用 Spring 配置 LDAP 身份验证时遇到问题。

使用 LDAP Apache Directory Studio 我有以下与 LDAP 服务器的工作连接:

Bind DN or USER: cn=HIDDEN_USERNAME,OU=HIDDEN_OU1,OU=HIDDEN2,OU=Admin,DC=MY_COMPANYNAME,DC=COM
Authorization ID: SASL PLAIN only
Bind Password: ******

使用此连接,我可以在 root 下找到我的帐户:

Root DSE/DC=MY_COMPANYNAME,DC=COM/OU=User Accounts/OU=Enabled Users/OU=Consultants/CN=MySurname My Name

右键单击我的帐户会给出以下值:

DN: CN=MySurname MyName,OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM
URL: ldap://IP_ADRESS:389/CN=MySurname%20MyName,OU=Consultants,OU=Enabled%20Users,OU=User%20Accounts,DC=MY_COMPANYNAME,DC=COM

我将配置 WebSecurityConfigurerAdapter 以便通过以下方式通过 ldap 服务器获得身份验证:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication()
            .userDnPatterns("CN={0},OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM")
            .contextSource()
            .url("ldap://IP_ADRESS:389/")
            .managerDn("HIDDEN_USERNAME")
            .managerPassword("*****")
            .and()
            .passwordCompare()
            .passwordEncoder(new LdapShaPasswordEncoder())
            .passwordAttribute("userPassword");
}

我尝试以多种方式设置 userDnPattern,但没有结果。我做错了什么?

【问题讨论】:

    标签: spring-security ldap


    【解决方案1】:

    使用您指定的 DN 模式,您的登录尝试需要使用用户 ID“MySurname MyName”(并且空格可能是个问题)。用户提供的登录 ID 字符串插入到您在上面包含的 DN 模式中,您将与

    绑定
    CN=MySurname MyName,OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM
    

    这与您的完全限定 DN 看起来是匹配的。如果您希望能够使用您的 ID 而不是构成 CN 的姓/名字符串登录,或者如果需要验证的帐户存在于多个 OU 位置,则 userSearch 可能比 DN 模式更可取。

    如果您针对 Active Directory 域进行身份验证,则可以使用 {0}@domain.gTLD 或 DOMAIN{0} 作为用户模式 ​​-- 当提供登录 ID 时,这些模式形成 userPrincipalName 和sAMAccountName 分别。

    【讨论】:

    • 当我使用 Apache Directory Studio 查看我的 LDAP 帐户上的所有属性名称和值时,我发现该属性“userPassword”不存在。我在列表中看不到任何可能是密码值的合理属性。这是什么意思?这是我公司中的生产 LDAP,所以它以某种方式工作。
    【解决方案2】:

    针对您的上述评论:Active Directory 隐藏了密码字段,即使是域管理员也无法读取。

    我同意其他用户的观点,即对于 AD,您需要使用用户搜索过滤器,如果您想针对用户名执行此操作,您应该使用 samaccountname={0}

    【讨论】:

      猜你喜欢
      • 2016-07-18
      • 2016-02-07
      • 2011-09-22
      • 2017-07-02
      • 2020-04-14
      • 2015-11-18
      • 2015-11-11
      • 2014-02-15
      • 2016-01-06
      相关资源
      最近更新 更多