2011-12-09 69 views
2

我是通過kerberos協議進行身份驗證的新手,所以我嘗試閱讀很多howto,但似乎找不到任何與我的約束有關的細節。以下是我有:Kerberos SSO與Apache和Tomcat在JDK5下

  • Active Directory服務器上的用戶進行身份驗證登錄到自己的工作站
  • 每個最終用戶使用IE 7連接到我的網應用程序
  • 一個Apache服務器負載均衡
  • 一些Tomcat服務器充當Apache服務器的工作者。
  • 每個tomcat的
  • ,我有2雅加達的servlet運行時,用戶只能在一個servlet的連接(進一步,我將其稱爲servlet作爲如果只有一個)
  • 我雄貓需要JDK5下運行。不是jdk6或jdk4。這是jdk5時期。

現在我想要一個自動登錄我的servlet。基本上我只需要我的servlet來檢索客戶的主體,然後我就可以管理其餘的。 根據我的理解,我的客戶有一張票,他要求KDC獲取訪問apache服務器的特殊票據,然後他試圖連接到Apache服務器。基於他的密鑰表,apache服務器然後解碼認證數據並授予/拒絕對指定資源的訪問。 我對不對?請通過此指導我,我已經閱讀了4天的頁面,仍然不知道哪種解決方案更合適。我嘗試了Apache的mod_auth_kerberos,但是他沒有抓住用戶的票據,而是像基本認證那樣提問。顯然spgneo

感謝

回答

3

好吧,我得到這個工作:

  1. 安裝Kerberos 5 + apache的2 + mod_auth_kerb所。
  2. 在AD,產生只有主密鑰表,您將使用Apache的,我用HTTP/[email protected]
  3. 將這個密鑰表文件Apache服務器上,使之可讀僅 由您的Apache用戶。
  4. 然後編輯這些指令你的apache的conf爲你的安全 位置

的apache.conf

[…] 
ServerName apache.mydom.com:80 
[…] 
LoadModule auth_kerb_module modules/mod_auth_kerb.so 
[…] 
<LocationMatch /secure)> 
    [… some other stuff …] 
    Order allow,deny 
    Allow from all 
    AuthType Kerberos 
     AuthName "Authentification requise" 
     KrbAuthRealms MYDOM.COM 
     #this allows user to be saved in the request 
     KrbSaveCredentials on 
     #this one force Negotiate AuthType instead of basic fallback 
     KrbMethodNegotiate on 
     #this trim the realm from username saved in the request (request.getRemoteUser() will give you "user" instead of "[email protected]" 
     KrbLocalUserMapping on 
     KrbAuthoritative on 
     KrbVerifyKDC on 
     Krb5Keytab /install/binaries/httpd/apache.keytab 
     KrbServiceName HTTP 
    require valid-user 
</LocationMatch> 

而且有一件事我幾乎沒有發現在網絡上,你有修改您的tomcat服務器配置(tomcat/conf/server.xml):

<Connector [... AJP connector configuration ...] request.tomcatAuthentication="false"/> 

這是真的很重要因爲沒有它你tomcat不會從tomcat auth檢索任何信息。 不要忘記,DNS對於Kerberos安裝真的非常重要。如果您有任何問題,請嘗試檢查您的所有服務器的DNS。

+1

偉大而深刻的答案! FTR:JDK5不支持SPNEGO。 –