Spring Security 3.1版-需要使用没有添加域的userPrincipalName或sAMAccountName匹配用户(搜索过滤器?)

时间:2019-10-04 07:57:32

标签: java spring spring-security active-directory spring-security-ldap

全部

我们的IT部门已决定通过在AD的userPrincipalName中添加一个不同的后缀到实际使用的域中来更改AD中的用户后缀。

例如我们的域名是xxx.com,但userPrincipalName现在是“ usera@zzz.tech”,而以前是“ usera@xxx.com”。

由于这个原因,我认为Spring LDAP AD认证将不再与此配合使用: userPrincipalName是在尝试进行身份验证时使用名称+域构建的。

我需要以某种方式覆盖它-但是请保持Spring Security 3.1版(理想情况下!)

这是我们使用的安全性豆

<bean id="ldapActiveDirectoryAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
    <constructor-arg value="$websec{authentication.base}" />
    <constructor-arg value="$websec{ldap.providerUrl}" />
    <property name="authoritiesMapper" ref="dataAutomationGrantedAuthoritiesMapper" />
    <property name="useAuthenticationRequestCredentials" value="true" />
</bean>

我该如何忽略这种行为?

谢谢

1 个答案:

答案 0 :(得分:0)

我们最终修改了该类的原始Spring代码:ActiveDirectoryLdapAuthenticationProvider并更改了方法createBindPrincipal以允许与安全根具有不同域的userPrincipalName 要授权的域。

/**
 * Create bind principal by appending configured user domain to username if it doesn't already contain a domain.
 *
 * @param username  User name for which to create bind principal.
 *
 * @return username, if configured domain is null or the username already contains a domain; otherwise username
 *         appended with the configured user domain.
 */
String createBindPrincipal(final String username) {
    if (domain == null || username.contains("@")) {
        return username;
    }
    return username + "@" + userDomain;
}