2012-12-27 301 views
1

當前,我正在使用用戶名和密碼作爲ldap的連接憑證(以便驗證AD的用戶)。使用NTLM安全協議連接到LDAP(Active Directory)

對於此處的身份驗證,我使用InitialDirContext創建了一個初始上下文(用於Active Directory),其中我們提供了一組環境屬性,其中包含身份驗證信息。

我的代碼如下所示:

env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, ...); 
env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
env.put(Context.SECURITY_PRINCIPAL, ...); 
env.put(Context.SECURITY_CREDENTIALS, ...); 
env.put("com.sun.jndi.ldap.connect.timeout", ...); 

try { 
    ctx = new InitialLdapContext(env); 
} 
catch (NamingException e) { 
    System.out.println("error") 
} 

我想改變這個代碼,因此它會驗證輸入的用戶名和密碼,使用NTLM對LDAP的憑據。

你能提供我任何例子嗎?

NTLM - 是微軟安全協議的套件,提供 - 驗證 - 誠信 - 保密

回答

0

算了。 Java中沒有SASL支持NTLM。使用GSS-API。總是放棄使用專有技術,有一個死衚衕。並且從不使用simple驗證,它在明文上傳輸密碼。至少使用Digest MD5。

+1

我不同意。當使用強密碼通過SSL傳輸BIND請求時,DIGEST-MD5比簡單認證更弱。 DIGEST-MD5要求LDAP目錄服務器能夠解密密碼,這意味着密碼必須使用可逆加密進行存儲。使用簡單的身份驗證,密碼可以存儲在單向散列中,如SSHA512,這比可逆加密更強。由於這個原因應該避免使用DIGEST-MD5。 –

+0

我不同意你的發言。這會使任何共享的祕密機制過時。只要服務器受到保護,摘要就像每個祕密一樣安全。基本從未安全。這會使Active Directory與PKI不一樣。 –

+0

感謝Michael的建議:) – user1931914

0

我也想使用NTLM連接到Microsoft LDAP目錄。

不幸的是,微軟在LDAP管理權限方面的差異,取決於您是否使用Kerberos/NTLM與BIND/MD5進行連接,而且我對使用標準管理工具感到不滿。 Kerberos僅限於用戶,用戶客戶端和LDAP服務器位於同一個域中,並且需要爲JRE配置errorprone JAAS配置文件。

由於它最常用的目錄,因爲我也找不到任何現有的解決方案,我試圖創建一個NTLM綁定解決方案我自己,我成功了。

它與一個額外的LDAP BIND類擴展UnboundID Java的LDAP SDK一個Java類文件: https://sourceforge.net/projects/javaldapntlmbind/

該解決方案採用UnboundID Java的LDAP SDK併爲NTLM處理它採用samba.org的JCIF Java庫。 由於使用JCIF,它獨立於平臺,不需要在Windows上運行。

相關問題