2009-09-24 144 views
4

我正在使用Java編寫的服務器和在同一網絡上的Windows計算機上運行的客戶端(使用.Net編寫的桌面應用程序)。我想要進行一些基本的身份驗證,以便服務器可以確定運行客戶端的用戶的用戶名,而不需要用戶在客戶端重新輸入他們的Windows密碼。在Java服務器中對Windows用戶進行身份驗證

這是可能的,什麼是最簡單的方法來實現它?

我看了一些可用的API,看起來好像Java中的org.ietf.jgss包和.Net中的NegotiateStream類應該可以相互交談來實現這一點 - 但我不斷打擊令人沮喪的錯誤消息,我不明白。我想我會檢查這是否是正確的方法,如果是這樣我會發佈一個單獨的問題與關於錯誤的更多細節問題:)

+0

你可以添加一些關於他們如何溝通的細節? HTTP? RMI? JMS?插座? – Nathan 2009-09-24 21:59:25

+0

「真實的東西」是SOAP。話雖如此,但構建和運行完整的應用程序需要一段時間,所以到目前爲止,我的測試都使用了一個基於小型原始套接字的服務器 - 這樣我就可以在幾秒鐘內完成更改並重新運行它。如果我可以得到這個工作,延伸到真正的應用程序應該是相對簡單的(我希望!) – 2009-09-24 22:36:46

回答

3

該方法是正確的。注意一些事情,雖然:

  • 這將對無關「基本身份驗證」(在HTTP)
  • .NET會嘗試使用SPNEGO GSS機制。請參閱Sun documentation以獲得對此機制的正確支持。
  • 您的服務需要體現服務主體。因此,您不僅需要爲用戶創建Active Directory帳戶,還需要爲該服務創建一個Active Directory帳戶,並且需要將該服務的密碼放入Java密鑰表中。
+0

謝謝。當我說「基本認證」時,我想我選擇了一個不幸的短語 - 沒有意識到它具有特定的含義。我只是想說我不想做任何複雜的事情。 – 2009-09-24 22:54:45

+0

@盧克:我在猜測那麼多。請注意,使用GSS-API和Kerberos非常複雜,正如任何其他單登錄機制一樣。 – 2009-09-24 23:00:30

+0

我發佈了一個後續更詳細的信息,如果你知道這個東西,我會很感激你的眼睛! :) http://stackoverflow.com/questions/1499267/how-to-get-negotiatestream-to-use-kerberos – 2009-09-30 17:11:48

0

不熟悉GSS機制。我會建議在無密碼的ssh中使用共享密鑰機制。

0

這個開源庫http://spnego.sourceforge.net正是你在找什麼。它在服務器上實現HTTP Servlet過濾器,以便您的Web應用程序可以調用request.getRemoteUser()來查找用戶名。

相關問題