【发布时间】:2016-05-05 12:58:49
【问题描述】:
我希望使用 unboundID 向 AD 进行身份验证,但我在绑定操作时收到 serverdown 错误。 当我通过 JNDI 而不是 unboundID 执行此操作时,请求工作正常。 我在网上查了一下,大多数似乎都有类似的做事方式。 例如我已经提到了特里的这个答案 LDAP: How to authenticate user with connection details
这是我的代码
public class LDAPSearch_unboundID {
private static final String LDAPIP = "hostname";
private static final int LDAPPORT = 636;
private static final String USERDN = "adminuser";
private static final String PASSWD = "adminpass";
private static final String SEARCHDN = "DC=AA,DC=BB,DC=CC";
public static void main(String[] args) {
authUser();
}
private static void authUser(String userid) {
BindRequest bindRequest = new SimpleBindRequest(SEARCHDN,PASSWD);
System.out.println("101");
try {
LDAPConnection ldapConnection = new LDAPConnection(LDAPIP,LDAPPORT);
//LDAPConnection ldapConnection = new LDAPConnection(lco, LDAPIP,LDAPPORT, SEARCHDN, PASSWD);
System.out.println("102");
BindResult bindResult = ldapConnection.bind(bindRequest);
System.out.println("103");
ResultCode resultCode = bindResult.getResultCode();
System.out.println("104");
if(resultCode.equals(ResultCode.SUCCESS))
{
System.out.println("Authentication SUCCESS!!!");
}
else
{
System.out.println("Authentication FAILED!!!");
}
ldapConnection.close();
}
catch (LDAPException e){
e.printStackTrace();
}
}
}
这里的输出是
101 102 LDAPException(resultCode=81 (server down), errorMessage='连接到服务器主机:端口在等待绑定请求响应时关闭 SimpleBindRequest(dn='DC=AA,DC=BB,DC=CC'):尝试从服务器读取响应时发生 I/O 错误:java.net.SocketException: Connection reset') 在 com.unboundid.ldap.sdk.SimpleBindRequest.handleResponse(SimpleBindRequest.java:718) 在 com.unboundid.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:570) 在 com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2150) 在 ldapConnection.LDAPSearch_unboundID.authUser(LDAPSearch_unboundID.java:45) 在 ldapConnection.LDAPSearch_unboundID.main(LDAPSearch_unboundID.java:34)
我已经在其他几台 AD 服务器上尝试过这个。我做错了什么?
更新:我必须补充一点,我正在使用 SSL 连接。 我试过用这个更新代码的 ldapconnection 部分。
SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection ldapConnection = new LDAPConnection(socketFactory);
ldapConnection.connect(LDAPIP,LDAPPORT);
System.out.println("102");
BindResult bindResult = ldapConnection.bind(bindRequest);
现在我收到此错误
101 102 LDAPException(resultCode=49 (invalid credentials), errorMessage='80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 57, v1db1 在 com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2178) 在 ldapConnection.LDAPSearch_unboundID.authUser(LDAPSearch_unboundID.java:56) 在 ldapConnection.LDAPSearch_unboundID.main(LDAPSearch_unboundID.java:39)
我在结果代码 49 下看不到“数据 57”的任何文档。 凭据正确。
【问题讨论】:
-
我也有同样的问题。我找不到任何关于 AcceptSecurityContext 的数据十六进制代码 57 我在 Server Stackexchange 上提出的问题:serverfault.com/questions/859277/… 但到目前为止没有答案
标签: java active-directory ldap jndi unboundid-ldap-sdk