2013-04-26 121 views
0

我有一個web應用程序託管在Apache Web服務器上。我有外部的Java應用程序運行在這個Web應用程序中集成的Tomcat上。使用LDAP的用戶名和密碼的Tomcat驗證

apache是​​kerberized,我得到訪問它的人在Intranet的用戶名。我想使用相同的用戶名,並在tomcat上傳遞它來檢查ldap並授權用戶。

我正在研究支持LDAP模塊的JNDI領域。但問題是我無法訪問用戶的密碼。但是我能夠獲得用戶所屬的組,並基於此來驗證用戶身份。

所以我的問題是我將能夠驗證用戶對Tomcat服務器通過LDAP只有用戶名,而不是密碼?

PS:對不起,我沒有代碼或配置,現在可以發佈。我發現的唯一資源實現了用戶名和密碼。我不能克服tomcat服務器,因爲我在網絡中有其他問題。

+0

因此,身份驗證包含'該用戶是否存在'?在這種情況下,您的問題是我可以查詢LDAP以查看是否存在此用戶的記錄,答案必須是肯定的。但是,您的解決方案聽起來很不安全。 – Romski 2013-04-26 02:42:30

回答

0

「我一直在尋找到支持LDAP模塊JNDI的境界。但問題是我沒有 訪問用戶的密碼。但是我能夠得到用戶所屬的組和基於 上我想驗證用戶。「

有人問我寫一些代碼來做同樣的事情。我找到了一種讓它工作的方法。然而,儘管IE瀏覽器可以自動檢測Windows用戶名(因爲我的代碼解析了一些NTLM信息,只有IE瀏覽器以頭部形式傳入),但在Firefox或任何其他瀏覽器中,用戶都會看到與身份驗證框和他們輸入的任何用戶名將被接受!它非常不安全。如果只有IE自動傳遞它,它不是真的,只是IE自動傳遞它;但是當有人拿到驗證框並輸入任何他們想要的名字的時候,Firefox也會把它傳入,這就是問題所在。 )

我會建議編寫一個C#.NET服務,以在IIS上集成身份驗證的網絡服務器上進行身份驗證。然後,當有人點擊Java站點並且用戶名會話變量爲空時,重定向到C#服務。讓C#服務將信息保存在包含IP地址和瀏覽器的可信/安全數據庫中,並重定向到Java應用程序,該應用程序讀取數據庫以驗證IP地址和瀏覽器,並且該記錄剛創建。

編輯:我只是注意到你說你的Apache是​​kerberized,已經得到了Windows用戶名,這可能導致上面的問題解析NTLM頭不可靠的問題無效。在這種情況下,如果您可以通過LDAP獲取AD組,您可以使用自己的代碼在Web應用程序中對用戶進行身份驗證,但可能不使用官方的Tomcat身份驗證方案。上述內容僅僅是因爲我的Tomcat沒有與Apache服務器配對,而是與IIS服務器配對。所以基本上,它是一樣的,除了你不需要C#。

+0

你的解決方案聽起來更像是在我的apache應用程序和tomcat應用程序之間有一箇中間層。如果他們可以通過的唯一方式是我的apache web應用程序,這將工作得很好。但是,如果用戶確實獲得了tomcat應用程序的鏈接(他可以使用firebug,chrome工具),那麼就不會有tomcat身份驗證,這會破壞整個目的。 – Naveen 2013-04-26 20:42:50