2013-01-24 40 views
1

我們擁有Windows Active Directory,所有用戶都已註冊並用於在Windows中登錄。使用LDAP和Servlet進行透明驗證

我們有一個Apache服務器配置爲使用LDAP來驗證該Active Directory中的用戶。它的設置使得在PHP中,我們所要做的就是撥打$_SERVER['REMOTE_USER']。瀏覽器在Windows中驗證用戶登錄並將此數據發送到Apache,Apache會與LDAP通信以驗證身份驗證。當LDAP認證時,該代碼返回用戶的登錄名,否則返回null。

通過這種方式,我們可以安全方便地對PHP內的用戶進行身份驗證,並使用他們的AD登錄名來控制對我們軟件的訪問。另一個優點是,我們不需要登錄頁面,甚至不必處理變量中的密碼:認證是對用戶透明地處理的,並且它們會自動記錄到我們的軟件中,並且他們的密碼永遠不會出現在我們的代碼中。

我想用Servlet做同樣的事情。我認爲沒有理由不會發生,如果它適用於PHP。但我找不到如何去做。我GOOGLE了,但找不到任何東西。有人做過這樣的事情,可以指點我嗎?

使用登錄名和密碼的標準認證工作在Java中。如果我有域名,登錄名和密碼(在Servlet中來自一個登錄頁面),我可以驗證任何用戶。

+0

謝謝你們!我找到了一個名爲spnegro的組件,它使getRemoteUser()可以工作。 – Hikari

回答

3

您要做的是將SSO提供程序插入您的Web應用程序。有幾種選擇,你將不得不做自己的研究,瞭解你的環境中最適合的工作。你可能想探討以下安全框架,而這一切使SSO:

也有商業產品,如CA SiteMinder的做同樣的事情。

+0

偉大的隨機downvoters再次罷工。 – Perception

1

您在Servlet上的doGet和doPost方法中擁有的HttpServletRequest對象具有等效的PHP $_SERVER['REMOTE_USER'],它被稱爲getRemoteUser()

1

您的帖子被標記爲Tomcat。您可以在tomcat中添加一個「領域」來執行身份驗證。

我不知道如何不提示輸入密碼,除非您使用某種SASL插件來驗證用戶對LDAP。

$ _SERVER ['REMOTE_USER']表示您正在使用「HTTP身份驗證」標頭,AFIK需要彈出憑據。如果只使用IE對Windows服務器,這可能是透明的。

還有an example of how to configure tomcat

+0

它也適用於FireFox。不幸的是,IDK如何配置Apache以使其工作,因爲我無法訪問它,但調用'$ _SERVER ['REMOTE_USER']'的任何PHP代碼都會收到他的AD登錄名。在極少數情況下,FireFox會顯示登錄彈出窗口。 – Hikari

+0

如果您正在獲取「瀏覽器」,則它是服務器的基本身份驗證請求。 http://en.wikipedia.org/wiki/Basic_access_authentication/ – jwilleke