2013-02-15 43 views
2

希望有人可以在使用NTLMv2調用應用程序(返回XML)的簡單URL時補救我的天真。使用Java實現NTLM無提示登錄

我已經讀了幾乎所有的問題和頁面,但我留下了一個壓倒一切的好奇心。目前我正在使用HTTPClient(儘管可以更改)以及最新的JDK(撰寫本文時)。

這裏是出現調用JCIFS庫中的示例頁面: http://hc.apache.org/httpcomponents-client-ga/ntlm.html

一切看起來不錯,雖然混亂,但是這突出了許多我所看到的例子提出了一個問題 - 供應NTCredentials的問題。

對我來說,NTLM的重點是我不必提供證書。目標應用程序設置爲使用NTLM,因此肯定應該使用當前登錄用戶的用戶權限?爲什麼我應該自己提供任何證書?

道歉,如果我失去了一些明顯的東西。我只需要使用Java的最基本的NTLM SSO。我不在乎什麼版本,我能夠使用最新的任何東西。

抱着希望!謝謝閱讀。

回答

0

不幸的是,有一種方法可以在純Java環境中進行單點登錄。

NTLM不是單點登錄的解決方案。 NTLM是一種質詢/響應身份驗證機制,它需要用戶密碼的NTLM哈希值。 Windows機器能夠使用NTLM提供單一登錄,因爲NTLM哈希是持久的。然後,他們能夠基於持久散列來計算對挑戰的響應。

沒有訪問該散列(並且據我所知,你不能簡單地請求它),你需要自己計算它。這需要擁有用戶的密碼。

同樣,您可以使用SPNEGO身份驗證(如果遠程系統設置爲支持該身份驗證)執行Kerberos票證的單點登錄,但Java不幸重新實現了Kerberos,而不是使用系統Kerberos庫。因此,即使您已經登錄到域,您也需要爲Java獲取另一個Kerberos票證。這意味着再次輸入密碼。

避免鍵入密碼進行身份驗證的唯一現實方法是調用本地方法。在Windows上,這是SSPI,它將爲您提供響應NTLM或SPNEGO挑戰的能力。在非Windows平臺上,這由非常相似的GSSAPI處理,並提供響應SPNEGO(Kerberos)的能力。