2011-09-27 74 views
1

想法是通過配置我的Tomcat 6容器來執行身份驗證(使用用戶名+密碼的基本表單),以便將它(使用JNDI Realm)連接到Microsoft Active Directory檢查憑證是否正確。對Microsoft Active Directory的Java JNDI查找(使用Tomcat 6),身份驗證失敗

我發現了很多關於這個主題的文檔,但是我沒有正確地配置Realm,我相信。

這是我在Oracle的網站上找到的文檔(這恰好是因爲Tomcat 4的一樣)http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JNDIRealm

找到該Oracle文檔相當差,但在其他網站來像這樣一個http://www.jspwiki.org/wiki/ActiveDirectoryIntegration其關於這個問題的複雜的。

但是多次嘗試後,我仍然無法成功驗證:

  1. 當我啓動Tomcat,似乎一切都很好,沒有任何警告或任何其他錯誤信息出現。
  2. 當我嘗試進行身份驗證時,我一直重定向到我的錯誤頁面。並沒有警告或任何其他消息出現。

這些是境界CONFIGS的2我試圖

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" 
    connectionName="test" 
    connectionPassword="test" 
    connectionURL="LDAP://subDomain.myDomain.co.uk:389" 
    userPattern="uid={0},ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk" 
    roleBase="ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk" 
    roleName="cn" 
    roleSearch="memberUid={1}" 
/> 

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" 
    connectionName="test" 
    connectionPassword="test" 
    connectionURL="LDAP://subDomain.myDomain.co.uk:389" 
    userBase="ou=London,dc=subDomain,dc=myDomain,dc=co,dc=uk" 
    userSearch="(sAMAccountName={0})" 
    roleBase="ou=Groups,dc=subDomain,dc=myDomain,dc=co,dc=uk" 
    roleName="cn" 
    roleSubtree="true" 
    roleSearch="(member={0})" 
/> 

我已經測試使用LDAP瀏覽器的連接憑證和它們是細。

這是我的web.xml提前

<web-app> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <security-constraint> 
    <display-name>Example Security Constraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>Protected Pages</web-resource-name> 
     <url-pattern>/protected/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>London</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <!-- Default a login configuration that uses form-based authentication --> 
    <login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>DBRealm</realm-name> 
    <form-login-config> 
     <form-login-page>/WEB-INF/login.jsp</form-login-page> 
     <form-error-page>/WEB-INF/error.jsp</form-error-page> 
    </form-login-config> 
    </login-config> 

    <!-- Define a logical role for this application, needs to be mapped to an actual role at deployment time --> 
    <security-role> 
    <description>All Users</description> 
    <role-name>London</role-name> 
    </security-role> 
</web-app> 

感謝, A.

回答

0

您使用的uid或memberUid AD中的屬性?那些是非典型的。

您可能需要將userPattern中的uid=替換爲cn=

對於roleSearch,可能實際上應該是member=

+0

我改變了uid =在我的userPattern與cn =但沒有運氣。 roleSearch字段是強制性的嗎? –

+0

我添加了第二個Realm配置測試,在我的問題上面也失敗了。還是行不通。任何想法? –

+0

我對JNDI一無所知 - 只是從AD的角度出發。到目前爲止,解決這個問題的最佳方法是獲取網絡捕獲並在WireShark中打開它。您將能夠準確查看發送給AD的內容並相應調整。我可以在此基礎上提供幫助。 –

相關問題