簡體   English   中英

針對特定請求使用LDAP驗證憑據

[英]Authenticate credentials with LDAP for specific requests

我有一個使用JBoss 5.2部署的Web應用程序。 為了使用戶能夠使用該應用程序,他/她必須使用用戶名和密碼通過LDAP服務器進行身份驗證(使用簡單身份驗證)。 通過為JBoss設置login-config.xml並為我們的實現提供一個<login-module> ,可以完成所有這些工作。

問題來了:登錄后,我遇到一種情況,要求用戶在執行特定操作時提供用戶名和密碼(我還將使用LDAP服務器進行身份驗證)。 我希望能夠重用與用於向Web應用程序驗證用戶身份相同的機制。

我登錄到應用程序的表單發布到j_security_check因此,按照這個步驟,我試圖向j_security_check發送請求,但JBOSS返回了404。 j_security_check閱讀,我發現j_security_check無法被任何任意請求訪問並且必須響應對安全資源的質詢。

那么,如何驗證用戶使用同一LDAP服務器提供的第二組憑據?

編輯:

為了澄清,問題是如何將用戶的憑據輸入發送到LDAP服務器進行身份驗證。 抓取用戶等的輸入已完成。 剩下的就是接受此輸入並將其發送到LDAP服務器並獲得響應(這就是我遇到的問題)。

如果有幫助的話,登錄到Web應用程序將使用擴展UsernamePasswordLoginModule的自定義類。

因此,經過大量研究,我最終找到了JBoss環境的解決方案(這是我正在使用的解決方案)。

捕獲用戶的憑據后,便可以通過POST / GET將其發送到服務器,並且服務器可以執行以下操作,以使用您已配置的任何身份驗證策略(在login-config.xml )來驗證憑據:

WebAuthentication webAuthentication = new WebAuthentication();
boolean success = webAuthentication.login(username, password);

為了對此進行擴展,我還能夠通過HttpServletRequest (將其傳遞到服務器端處理程序中)檢查用戶的角色/組:

boolean userIsInRole = servletRequest.isUserInRole("nameOfGroup")

Spring Security文檔對此進行了解釋

想要為JBoss 6.2+添加另一個答案,其中WebAuthentication不再存在。 我使用了LoginContext的創建來實現相同的結果:

String SECURITY_DOMAIN_NAME = "ssd"; // the security domain's name from standalone.xml

String username = "user";
String password = "password";

LoginContext lc = null;
try {
    lc = new LoginContext(SECURITY_DOMAIN_NAME, new UsernamePasswordHandler(username, password.toCharArray()));
    lc.login();
    // successful login
} catch (LoginException loginException) {
    // failed login
}

然后使用uf lc.getSubject().getPrincipals()驗證角色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM