有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用LDAP对特定请求的凭据进行身份验证

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

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

我登录应用程序的表单发布到j_security_check,因此根据这个,我试图向j_security_check发送请求,但JBOSS返回404。通过仔细阅读,我发现j_security_check不能被任何任意请求访问,必须响应对安全资源的质询请求

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

编辑:

为了澄清,问题是如何将用户的凭证输入发送到LDAP服务器进行身份验证。从用户处获取输入等都已完成。剩下的就是获取这个输入并将其发送到LDAP服务器并获得响应(这就是我遇到的问题)

如果有帮助的话,那么web应用程序的登录将使用扩展UsernamePasswordLoginModule的自定义类


共 (3) 个答案

  1. # 1 楼答案

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

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

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

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

    boolean userIsInRole = servletRequest.isUserInRole("nameOfGroup")
    
  2. # 2 楼答案

    想要为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
    }
    

    以及使用uflc.getSubject().getPrincipals()来验证角色

  3. # 3 楼答案

    {a1}解释了这一点