[英]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.