使用" proxy"进行Spring Active Directory身份验证用户

时间:2015-09-14 15:00:40

标签: java spring spring-security-ldap

我的项目中有一个特殊要求,即对Active Directory的身份验证应该使用特殊的("代理")用户完成。也就是说,首先我们必须使用这个特殊用户登录AD,然后我们应该"查询" AD关于"真实"的证书用户(尝试登录我的应用程序的用户)是正确的,使用"代理"用户会话。

有没有办法使用弹簧安全来做到这一点? ......现在我正在使用org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider

这些是我当前的依赖项:

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.2.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>3.2.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>3.2.5.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-ldap</artifactId>
        <version>3.2.5.RELEASE</version>
    </dependency>

这是通过spring的身份验证部分的配置:

<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
    <beans:constructor-arg>
        <beans:value>${security.ad.domain}</beans:value>
    </beans:constructor-arg>
    <beans:constructor-arg>
        <beans:value>${security.ad.url}</beans:value>
    </beans:constructor-arg>
</beans:bean>

<authentication-manager>
    <authentication-provider ref="ldapAuthProvider" />
</authentication-manager>

感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

我成功尝试了您的方案。也许迟到但它可能会帮助别人。 首先,我按照here描述设置了我的项目。 其次,我在我的WebSecurityConfig课程中添加了以下内容:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
{
    auth
        .ldapAuthentication()
            // User Base DN
            .userDnPatterns("cn={0},ou=...,ou=...,o=...,c=...") 
            .contextSource()
                // ldap server
                .url("ldaps://server:636") 
                // Bind credentials Bind DN
                .managerDn("cn=...,ou=...,o=...,c=...") 
                // Bind credentials Bind Password
                .managerPassword("...");
}