Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java连接到Active Directory_Java_Active Directory_Ldap_Md5_Jndi - Fatal编程技术网

将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

我尝试使用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、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。)