Java 使用未绑定id通过SSL绑定到Active Directory
我希望使用Unbounded对AD进行身份验证,但在绑定操作中出现了serverdown错误。 当我通过JNDI而不是unbounded执行此操作时,请求工作正常。 我在网上查过,大多数人似乎都有类似的做事方式。 例如,我引用了特里的回答 这是我的密码Java 使用未绑定id通过SSL绑定到Active Directory,java,active-directory,ldap,jndi,unboundid-ldap-sdk,Java,Active Directory,Ldap,Jndi,Unboundid Ldap Sdk,我希望使用Unbounded对AD进行身份验证,但在绑定操作中出现了serverdown错误。 当我通过JNDI而不是unbounded执行此操作时,请求工作正常。 我在网上查过,大多数人似乎都有类似的做事方式。 例如,我引用了特里的回答 这是我的密码 public class LDAPSearch_unboundID { private static final String LDAPIP = "hostname"; private static final int LDAPPORT =
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(服务器关闭),errorMessage='与服务器主机的连接:端口在等待绑定请求SimpleBindRequest的响应时关闭(dn='DC=AA,DC=BB,DC=CC'):尝试从服务器读取响应时发生I/O错误:java.net.SocketException:连接重置')
位于com.unbounded.ldap.sdk.SimpleBindRequest.HandlerResponse(SimpleBindRequest.java:718)
位于com.unbounded.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:570)
位于com.unbounded.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2150)
位于ldapConnection.LDAPSearch_unbounded.authUser(LDAPSearch_unbounded.java:45)
位于ldapConnection.LDAPSearch_unbounded.main(LDAPSearch_unbounded.java:34)
我已经在其他几个广告服务器上试过了。我做错了什么
更新:我必须补充一点,我正在使用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(无效凭证),errorMessage='80090308:LdapErr:DSID-0C090A9,comment:AcceptSecurityContext错误,数据57,v1db1
位于com.unbounded.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2178)
位于ldapConnection.LDAPSearch_unbounded.authUser(LDAPSearch_unbounded.java:56)
位于ldapConnection.LDAPSearch_unbounded.main(LDAPSearch_unbounded.java:39)
我看不到结果代码49下“数据57”的任何文档。
凭据是正确的。我使用的是以下内容:
public static LDAPConnection getNewSSLConnection(String address, int port, BindRequest bindRequest) throws LDAPException, GeneralSecurityException
{
SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
SSLSocketFactory sslSocketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection ldc = new LDAPConnection(sslSocketFactory);
ldc.connect(address, port);
ldc.bind(bindRequest);
return ldc;
}
除非您在封闭的受信任网络上,否则不要使用“TrustAllTrustManager()
找到更多方法。我也有同样的问题。我找不到AcceptSecurityContext的数据十六进制代码57。我在Server Stackexchange上问了这个问题:但到目前为止没有答案