Spring Ldap与tls连接解除绑定。验证失败

时间:2015-01-30 16:20:21

标签: ssl unbind spring-ldap

我正在使用Spring Ldap与需要tls身份验证的openLdap服务器进行交互。为了进行身份验证,我必须将contextSource设置为:

TransactionAwareContextSourceProxy ctx = (TransactionAwareContextSourceProxy) ldapTemplate.getContextSource();
SecureLdapContextSource secureContextSource = new SecureLdapContextSource();
secureContextSource.afterPropertiesSet();
ldapTemplate.setContextSource(secureContextSource);

SecureLdapContextSource在哪里

public void afterPropertiesSet() {
    //http://forum.spring.io/forum/spring-projects/data/ldap/33910-ldaps-external-certificate-contains-unsupported-critical-extensions-2-5-29-17
    this.setUrl("ldaps://myLdapServer.com:636/");
    super.afterPropertiesSet();
    Hashtable<String, Object> envProps = new Hashtable<String, Object>();

    envProps.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    envProps.put(Context.PROVIDER_URL, "ldaps://myLdapServer.com:636/");
    envProps.put(Context.SECURITY_PRINCIPAL, "adminUsername");
    envProps.put(Context.SECURITY_CREDENTIALS, "adminPwd");
    envProps.put(Context.SECURITY_AUTHENTICATION, "simple");
    envProps.put("java.naming.security.protocol", "ssl");
    envProps.put("com.sun.jndi.ldap.connect.pool", "true");
    envProps.put("java.naming.ldap.factory.socket", "org.springframework.ldap.samples.useradmin.EmblSSLSocketFactory");
    System.setProperty("java.naming.ldap.factory.socket", "org.springframework.ldap.samples.useradmin.EmblSSLSocketFactory");

    //set the environment
    super.setupAuthenticatedEnvironment(envProps, keyStore, keyStorePassword);
    // set the base environment again
    super.setBaseEnvironmentProperties(envProps);
    System.setProperty("javax.net.ssl.keyStore", keyStore);
    System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
    // it is necessary to call super.afterPropertiesSet() again!!!
    super.afterPropertiesSet();
}

之后,我已经能够通过这样的电话验证管理员:

ldapTemplate.authenticate(queryAdmin, password);

之后是我的问题。我想使用unbind方法从ldap中删除用户: ldapTemplate.unbind( “dnOfMyWorsteColeague”);

在测试中运行它我从ldap服务器获得以下异常: [LDAP:错误代码8 - 修改需要身份验证]

所以,我不能(因为我正在使用旧的ldap接口,没有Spring Ldap)进行身份验证并保持会话执行只允许管理员执行的命令。

有什么想法吗?我想用Spring Ldap ......

感谢您的帮助,  马可

1 个答案:

答案 0 :(得分:0)

我知道这个Q超级老了,我对LDAP比较新,但我认为unbind()用于关闭LDAP连接,而不是删除用户。为此,您可以使用delete()

https://www.ldap.com/the-ldap-delete-operation