将Java连接到Active Directory
我尝试使用Java代码连接到Active Directory,但收到以下错误消息:将Java连接到Active Directory,java,active-directory,ldap,md5,jndi,Java,Active Directory,Ldap,Md5,Jndi,我尝试使用Java代码连接到Active Directory,但收到以下错误消息: Début du test Active Directory Search error: javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C: LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 52e, v1db1 我使用JNDI、DIGES
Début du test Active Directory
Search error: javax.naming.AuthenticationException: [LDAP: error code 49 - 8009030C:
LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 52e, v1db1
我使用JNDI、DIGEST-MD5身份验证方法和非加密方法
这是我的代码:
public class TestAD {
static DirContext ldapContext;
public static void main (String[] args) throws NamingException
{
try
{
System.out.println("Début du test Active Directory");
Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, "ldap://societe.fr:389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5");
ldapEnv.put("java.naming.security.sasl.realm","myRealm");
ldapEnv.put("javax.security.sasl.qop", "auth");
ldapEnv.put("javax.security.sasl.strength","high");
ldapEnv.put(Context.SECURITY_PRINCIPAL, "dn:cn=administrateur,ou=users,o=societe.fr");
ldapEnv.put(Context.SECURITY_CREDENTIALS,"myPassword");
ldapContext = new InitialDirContext(ldapEnv);
// Create the search controls
SearchControls searchCtls = new SearchControls();
// Specify the attributes to return
String returnedAtts[]={"sn","givenName", "samAccountName"};
searchCtls.setReturningAttributes(returnedAtts);
// Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// specify the LDAP search filter
String searchFilter = "(&(objectClass=user))";
// Specify the Base for the search
String searchBase = "dc=societe,dc=fr";
// initialize counter to total the results
int totalResults = 0;
// Search for objects using the filter
NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls);
// Loop through the search results
while (answer.hasMoreElements())
{
SearchResult sr = (SearchResult)answer.next();
totalResults++;
System.out.println(">>>" + sr.getName());
Attributes attrs = sr.getAttributes();
System.out.println(">>>>>>" + attrs.get("samAccountName"));
}
System.out.println("Total results: " + totalResults);
ldapContext.close();
}
catch (Exception e)
{
System.out.println(" Search error: " + e);
e.printStackTrace();
System.exit(-1);
}
}
}
公共类TestAD{
静态DirContext-ldapContext;
公共静态void main(字符串[]args)引发NamingException
{
尝试
{
System.out.println(“Début du test活动目录”);
Hashtable ldapEnv=新的Hashtable(11);
ldapEnv.put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
ldapEnv.put(Context.PROVIDER\u URL,“ldap://societe.fr:389");
ldapEnv.put(Context.SECURITY_身份验证,“摘要-MD5”);
ldapEnv.put(“java.naming.security.sasl.realm”、“myRealm”);
ldapEnv.put(“javax.security.sasl.qop”、“auth”);
ldapEnv.put(“javax.security.sasl.strength”,“high”);
ldapEnv.put(Context.SECURITY_PRINCIPAL,“dn:cn=administrator,ou=users,o=societe.fr”);
ldapEnv.put(Context.SECURITY_凭证,“myPassword”);
ldapContext=新的初始目录上下文(ldapEnv);
//创建搜索控件
SearchControls searchCtls=新的SearchControls();
//指定要返回的属性
字符串returnedAtts[]={“sn”、“givenName”、“samAccountName”};
searchCtls.设置ReturningAttributes(returnedAtts);
//指定搜索范围
searchCtls.setSearchScope(SearchControls.SUBTREE_范围);
//指定LDAP搜索筛选器
字符串searchFilter=“(&(objectClass=user))”;
//指定搜索的基数
String searchBase=“dc=societe,dc=fr”;
//初始化计数器以合计结果
int totalResults=0;
//使用过滤器搜索对象
NamingEnumeration answer=ldapContext.search(searchBase、searchFilter、searchCtls);
//循环搜索结果
while(answer.hasMoreElements())
{
SearchResult sr=(SearchResult)answer.next();
totalResults++;
System.out.println(“>>>”+sr.getName());
Attributes attrs=sr.getAttributes();
System.out.println(“>>>>”+attrs.get(“samAccountName”);
}
System.out.println(“总结果:+totalResults”);
ldapContext.close();
}
捕获(例外e)
{
System.out.println(“搜索错误:+e”);
e、 printStackTrace();
系统退出(-1);
}
}
}
注意:我可以使用Apache Directory Studio的相同参数连接到我的Active Directory我不是Java ist,但你在上下文中是否丢失了一个字母。安全性\身份验证?也许应该是“DIGEST-MD5”?另外,我看不到您指示程序使用ldap v3的任何地方。虽然这可能与您的问题无关,但我强烈建议您使用v3协议。很抱歉,事实上它是“DIGEST-MD5”,我将修复我的帖子,谢谢s@ShadowWalker“ldap:”方案指示程序使用ldapv3。然后它看起来像是一个身份验证问题(错误的密码或错误的身份验证类型或类似的错误…错误52e已大致解释。不,我可以在Apache directory Studio中使用相同的ID连接到active directory。)