0

我有一个使用 JBoss 5.2 部署的 Web 应用程序。为了让用户使用该应用程序,他/她必须使用用户名和密码通过 LDAP 服务器(使用简单身份验证)进行身份验证。这一切都是通过login-config.xml为 JBoss 设置并提供<login-module>我们的实现来完成的。

问题出现在这里:登录后,我有一个场景要求用户在执行特定操作时提供用户名和密码(我还将使用 LDAP 服务器进行身份验证)。我希望能够重用用于验证用户进入 Web 应用程序的相同机制。

我的表单登录到应用程序帖子,j_security_check所以按照这个,我试图发送一个请求,j_security_check但 JBOSS 返回一个 404。从阅读了一下,我收集到j_security_check不能被任何任意请求访问,必须是响应对安全资源的质询请求。

那么,如何验证用户使用同一 LDAP 服务器提供的第二组凭据?

编辑:

澄清一下,问题是如何将用户的凭据输入发送到 LDAP 服务器进行身份验证。从用户那里获取输入等等都完成了。剩下的就是接受这个输入并将其发送到 LDAP 服务器并获得响应(这是我卡住的地方)。

如果有帮助的话,Web 应用程序的登录使用扩展 UsernamePasswordLoginModule 的自定义类。

4

3 回答 3

1

因此,经过大量研究,我最终找到了 JBoss 环境的解决方案(这就是我正在使用的)。

捕获用户的凭据后,您可以通过 POST/GET 将它们发送到您的服务器,您的服务器可以执行以下操作以使用您配置的任何身份验证策略(在 中login-config.xml)来验证凭据:

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

为了对此进行扩展,我还能够通过HttpServletRequest(传递到我的服务器端处理程序)检查用户的角色/组:

boolean userIsInRole = servletRequest.isUserInRole("nameOfGroup")
于 2012-12-04T18:37:14.070 回答
0

Spring 安全文档对此进行了解释

于 2012-12-03T20:24:28.020 回答
0

WebAuthentication想为不再存在的 JBoss 6.2+ 添加另一个答案。我使用创建 aLoginContext来达到相同的结果:

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
}

并使用uflc.getSubject().getPrincipals()来验证角色。

于 2015-01-26T19:26:27.433 回答