首页 文章

针对特定请求使用LDAP验证凭据

提问于
浏览
0

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

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

我的表单登录到应用程序帖子 j_security_check 所以按照这个,我试图向 j_security_check 发送请求,但是JBOSS返回404.从阅读了一下,我收集 j_security_check 无法通过任意请求访问并且必须响应对安全资源的质疑请求 .

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

EDIT:

为了澄清,问题是如何将用户的凭证输入发送到LDAP服务器以进行身份验证 . grab 用户的输入等等都完成了 . 剩下的就是获取此输入并将其发送到LDAP服务器并获取响应(这是我被困的地方) .

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

3 回答

  • 1

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

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

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

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

    boolean userIsInRole = servletRequest.isUserInRole("nameOfGroup")
    
  • 0
  • 0

    希望为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() 来验证角色 .

相关问题