2012-06-25 226 views
2

由於我使用Tomcat6作爲servlet容器運行Java,因此我發現適合使用Tomcat JNDIRealm feature,以便LDAP用戶無需任何額外的努力即可登錄到我的站點。我使用的LDAP服務器是OpenLDAP on UbuntuJava Tomcat LDAP身份驗證

在此我有登錄頁面使用form-based authentication超過https connection

我通過LDAP發現了兩個非常好的身份驗證用戶示例,herehere,這兩個示例都實現了我幾乎達到的感覺。爲什麼幾乎可以實現

當我嘗試使用錯誤的憑據登錄時,我適當地發送到<form-error-page>login-failed.html在我的情況。

當我的憑據很好,我驗證成功後,我開始爲網站中的所有網址獲得403。除非我重新啓動Tomcat,否則我無法刪除403錯誤(即使登錄頁面也沒有!)。

我懷疑是因爲我沒有roles在領域或其他配置文件中設置正確。爲了簡便起見,我把相關的配置文件摘錄於pastebin

需要注意的是,基於Tomcat由於該角色很容易附加到tomcat-users.xml中的用戶身上,因此auth可以很好地工作。因此,我認爲在成功通過身份驗證後,從LDAP獲取已通過身份驗證的用戶的角色時存在問題。

TL/DR

我在Tomcat的連接到LDAP身份驗證一個配置問題。用戶數據正確提取,但不是用戶的角色。可根據請求提供LDAP日誌消息;)

更新:我粘貼了LDAP數據here

+0

你有一個羣組cn = site-users,ou = groups,dc = mydomain,dc = com以及該羣組中的用戶嗎? – MaVRoSCy

+0

也請提供一些關於您的ldap結構的更多信息 – MaVRoSCy

+0

@MaVRoSCy基本的LDAP結構[here](http://pastebin.com/rQqxqtsm)。因此,我有'cn = site-users,ou = groups,dc = mydomain,dc = com'。請注意,'site-users'有一些指向用戶的'member'屬性。 –

回答

1

這是正確的。您的LDAP角色未被JNDIRealm找到。您需要在Tomcat外測試您的角色搜索字符串,以確保它產生您認爲應該產生的結果。由於您未提供任何LDAP詳細信息,因此無法進一步評論。

使用/ *在整個站點上設置安全權限是一個錯誤。您需要排除登錄頁面,也可能排除首頁和忘記密碼頁面,可能更多,不需要角色。

+0

LDAP詳情[here](http://pastebin.com/rQqxqtsm)。請注意,'site-users'有一些指向用戶的'member'屬性。 –

+0

@Josvic「網站用戶」根本沒有任何「成員」屬性,我可以看到。您似乎在LDAP組中有'uid',但您要告訴LDAP在'member'上進行搜索。 – EJP

+0

我有許多用戶在'objectClass'組織單元'people'下有'uid'。它們是'groupOfNames' objectClass'site-users'的*成員*。這個問題呢?所以用戶應該被認證。但用戶不匹配角色'site-users'。 –