2011-10-05 67 views
1

我寫了一個小程序來對ldap進行身份驗證。java程序無法對ldap進行身份驗證

import javax.naming.*; 
import javax.naming.directory.*; 
import java.util.Hashtable; 

class SAuth { 
    public static void main(String[] args) { 

    Hashtable env = new Hashtable(11); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
     "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, "ldap://xx.xx.xx.xx:yyyy/"); 

    // Authenticate as S. User and password "mysecret" 
    env.put(Context.SECURITY_AUTHENTICATION, "username"); 
    env.put(Context.SECURITY_PRINCIPAL, "cn=orcladmin"); 
    env.put(Context.SECURITY_CREDENTIALS, "password"); 

    try { 

     DirContext ctx = new InitialDirContext(env); 
      System.out.println(" i guess the connection is sucessfull :)"); 

     // Do something useful with ctx 

     // Close the context when we're done 
     ctx.close(); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 

}}

我得到以下錯誤:

javax.naming.AuthenticationNotSupportedException: orcladmin 
     at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:100) 
     at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:214) 
     at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2658) 
     at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:287) 
     at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175) 

     at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193 
) 
     at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.ja 
va:136) 
     at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav 
a:66) 
     at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 
67) 
     at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288 
) 
     at javax.naming.InitialContext.init(InitialContext.java:223) 
     at javax.naming.InitialContext.<init>(InitialContext.java:197) 
     at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav 
a:82) 
     at Simple.main(Simple.java:28) 

但是,如果我嘗試使用LDAP CMD線和相同的用戶憑據訪問LDAP目錄,它工作的順利進行。 例如:

ldapsearch -p <port> -h <ip> -D "cn=orcladmin" -w "password" objectClass=* 

回報有關的數據。 我猜java程序有問題,但不知道笏。

+0

可能複製http://stackoverflow.com/questions/4209710/authenticationnotsupportedexception-digest-md5-on-websphere –

+0

的同時,檢查HTTP ://www-01.ibm.com/support/docview.wss?uid = swg1PQ72729 –

+0

Artem:我試圖連接到Oracle Internet Directory的ldap。我懷疑設置是否與webspheres相同。 – Rahul

回答

3

嘗試chaning

env.put(Context.SECURITY_AUTHENTICATION, "username"); 

​​
+0

它工作..最後。有沒有解釋使用Java的各種ldap概念和API的書籍? – Rahul

+0

在oracle.com上有一個巨大的JNDI教程,包括有關LDAP的主要部分。 – EJP

相關問題