如何在Java中为LDAP服务器提供密码认证?

3

好的,我已经有大部分材料了,但是似乎无法正确地将它们组合起来。我基本上正在尝试使用简单的身份验证过程(可能带有GUI)来保护数据库数据,以确保查看数据的是正确的人。目前,我正在使用UnboundID来处理实际的身份验证,尽管我可以尝试使用其他方法,例如JAAS。下面是我为此编写的方法(bypass仅用于测试):

public static boolean authenticate(String username, String password) {
    if (username == null || password == null) {
        return false;
    }

    if (username.equals("bypass") && password.equals("bypass")) {
        return true;
    }

    try {
        LDAPConnection conn = new LDAPConnection(AUTH_URL,AUTH_PORT);
        BindRequest request = new SimpleBindRequest(username,password);
        BindResult result = conn.bind(request);
        return result.getResultCode().equals(ResultCode.SUCCESS);
    } catch (LDAPException ex) {
        ex.printStackTrace();
        return false;
    }
}

这段代码很明显很危险,因为密码以明文方式输入。我做了一些调查并发现应该在实际请求时使用类似SSL的东西来保护密码。这引发了另一个问题:如果我通过SSL发送请求,那么在发送请求之前我不仍然需要以明文形式提供密码吗?这不是很危险吗?我很惊讶像密码认证这样的事情不是通过简单的API完成的,因为很多应用都需要安全性。我很新手,希望能得到一些指导。谢谢!

2个回答

1

请在包括LDAP连接在内的所有地方使用TLS。只要您遵循良好的TLS连接实践,您的连接就是安全的。 -jim


嗯,我想使用TLS会引起与使用SSL相同的问题。在某个时候,用户将不得不提供密码。我有点困惑他们是如何做到的;我怎么可以让他们输入密码,同时又不存储或引用明文密码呢? - Niko

0

您可以使用Stormpath的Servlet插件来验证您的用户。 您只需要遵循这些非常简单的步骤即可创建您的Web应用程序。

您还可以将示例Servlet App(完全开源)作为您的Web应用程序的基础。

您将获得:

  1. 开箱即用的完整Web应用程序
  2. 完整的用户管理:用户身份验证、用户管理、用户存储、工作流等
  3. API管理
  4. 无忧的世界一流安全性
  5. 频繁的免费更新
总之,工作流程将是这样的。您将重定向您的用户到登录页面(或注册,让他们先注册)。一旦您的用户经过适当的身份验证(通过登录),您可以通过下一个URI成功的身份验证请求事件执行您自己的代码。
免责声明,我是一个活跃的Stormpath贡献者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接