关于我的其他问题:UnboundID LDAP DIGEST-MD5 binding cause NPE
我使用ApacheDS作为服务器,使用UnboundID作为API。
我按照建议的答案,NPE消失了。但是,现在我收到了这个错误。
LDAPException(resultCode=49 (invalid credentials), errorMessage='INVALID_CREDENTIALS: DIGEST-MD5: cannot acquire password for 'dn:uid=blah,ou=dev,dc=blah,dc=com in realm : mizar.com', diagnosticMessage='INVALID_CREDENTIALS: DIGEST-MD5: cannot acquire password for dn:uid=blah,ou=dev,dc=blah,dc=com in realm : blah.com')
at com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:1881)
at UnboundDemo.main(UnboundDemo.java:40)
代码如下:
conn = new LDAPConnection("1.1.1.1",389);
mdBind = new DIGESTMD5BindRequest("dn:uid=blah,ou=dev,dc=blah,dc=com", null, "test", "blah.com",null);
bindResult = conn.bind(mdBind);
System.out.println("MD5 bind success!");
以下是Directory Studio配置页面中的ApacheDS SASL配置:
SASL Host: 1.1.1.1
SASL Principal: ldap/ldap.example.com@EXAMPLE.COM
Search Base Dn: ou=dev,dc=blah,dc=com
ApacheDS doc没有解释SASL Principal是什么,所以我开始认为这可能是我的错误配置。这里的主要思想是针对许多SASL机制测试UnboundID。
答案 0 :(得分:2)
可能的情况是,ApacheDS服务器未配置为以允许其确定密码的明文值的格式存储密码。
DIGEST-MD5和CRAM-MD5 SASL机制的主要吸引力在于密码与其他信息相结合,并在发送到服务器之前使用单向摘要进行编码。这样可以确保密码不会以明文形式传输,从而保护密码免受任何能够观察通信而无需保护其余通信的人的保护。但是,使用这些机制之一进行身份验证的能力要求服务器能够确定密码的明文版本,以便它可以执行与客户端相同的加密处理。
如果您只是想测试UnboundID LDAP SDK执行SASL身份验证的能力,那么我建议使用PLAIN机制,因为它不应对用户条目施加任何特殊要求。如果您真的想使用DIGEST-MD5,那么您需要确保服务器可以访问需要使用该机制进行身份验证的用户的密码的明文表示。
尼尔