0

在我們的Intranet中,所有用戶都從Active Directory域登錄Windows。我必須開發一個解決方案,用於針對Active Directory進行身份驗證,該解決方案在Tomcat中運行,並可用於Servlet和Axis2。Tomcat,HTTP身份驗證和Active Directory

我已經能夠使用基本的JavaSE手動驗證驗證。我還創建了一個測試Servlet,它接收來自POST的登錄名和密碼並進行身份驗證,所以如果我至少使用HTTPS,我可以使用這個難看的解決方案。

我認爲HTTP認證是最好的方法,因爲它是HTTP標準,適用於Servlet和Axis2以及瀏覽器和任何類型的SOAP客戶端。

對於瀏覽器,期望的行爲是瀏覽器將打開登錄模式窗口,用戶將鍵入登錄名和密碼,我從Servlet中檢索它們並驗證AD。對於Axis2,客戶端處理其設置HTTP標頭的方式,並且使用Axis2用來創建WebService的類(如何做到這一點,我不知道並且還沒有搜索到...)檢索它並執行相同操作驗證。

問題是我面臨着很多的可能性,不能讓他們任何工作。大多數教程使用conf/tomcat-users.xml,永遠不會給我密碼。其他人使用NTLM或Kerberos,我已經嘗試將spnego用於Servlet,並且根本不起作用,並且它不適用於Axis2。我寧願使用不需要第三方庫的本機解決方案。

任何建議我可以從哪裏開始?

回答

2

看來您並不需要單一登錄用戶。在這種情況下,您不需要NTLM或Kerberos。您只需要通過Active Directory進行服務器端身份驗證即可。

幸運的是,AD公開自己的LDAP,有一些怪癖。請查看這個答案: Configuring Tomcat to authenticate using Windows Active Directory

如果配置對廣告的境界和容器(Tomcat)的身份驗證正確,你不應該需要檢索標題或編寫任何代碼做認證 - 容器(Tomcat)的會爲你而做。

編輯:

網站XML示例:

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Wildcard means whole app</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    <http-method>GET</http-method> 
    <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>user</role-name> 
    </auth-constraint> 
</security-constraint> 

     <login-config> 
      <auth-method>BASIC</auth-method> 
      <realm-name>default</realm-name> 
     </login-config> 
     <security-role> 
      <role-name>user</role-name> 
     </security-role> 
+0

感謝您的提示,但這並不能解決我的需求。如果我有用戶名和密碼,我已經能夠通過AD進行驗證。當然,如果它是由Tomcat或spnego等軟件完成的,我可以使用request.getRemoteUser(),但這對我來說很簡單,只需幾行手動完成。我的問題是我*需要*用戶名,通過身份驗證,它在應用程序中用於處理權限。 – Hikari 2013-02-24 05:58:20

+0

在Servlet中,如果我無法從cookie進行身份驗證,並且在請求標頭中找不到登錄名和密碼,那麼我可以輕鬆設置自己的HTTP標頭以詢問瀏覽器的登錄名和密碼。這就是爲什麼我認爲它不值得配置Tomcat。我需要的是學習如何處理來自Servlet內部的HTTP身份驗證以及來自生成Axis2 WebService的類的HTTP身份驗證(我正在認真考慮只爲每個操作參數添加一個auth bean並將WebService放入HTTPS中,在這種情況下我需要配置Tomcat來強制HTTPS)。 – Hikari 2013-02-24 06:02:05

+1

在基本身份驗證中,瀏覽器通過'WWW-Authenticate'頭提示,響應返回到'Authorization Basic:'頭中,該頭包含Base64中的ID和密碼。如果你想使用'getRemoteUser',web應用程序必須指定和auth約束 - 我已經爲答案添加了一個片段。除非您編寫閥門,否則在Tomcat中不能編程添加遠程用戶。 – 2013-02-24 08:13:24

1

在Active Directory環境的唯一合理的方法是唯一的Kerberos。對用戶來說最好的方法是Kerberos。如果你在Tomcat 7上,你有內置的支持。 Java 6擁有一切可用的工具。這就是我多年來所做的。

相關問題