0

我是 LDAP 身份验证的新手。我想使用他们的 LDAP 凭据对用户进行身份验证。为此,我从服务器获得了应用程序凭据,以便我可以对其他用户进行身份验证。

我作为应用程序用户的凭据如下:

Test LDAP Server IP: xx.xx.xx.xx
Port: 389
Bind DN:uid=uidxx,ou=applications,dc=dcxx
password: passxx

为了验证此用户,我将代码编写为

public String ldap()
{
        String value=null;
        SearchControls constraints= new SearchControls();
        Hashtable<String, String> env= new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL,"ldap://xx.xx.xx.xx:389");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL,"uid=uidxx, ou=applications, dc=dcxx");
        env.put(Context.SECURITY_CREDENTIALS,"passxx");

        try {
            DirContext ctx = new InitialDirContext(env);
            value = "Done with it";

        } 
        catch(AuthenticationException e)
        {
            value = "Invalid User name or password";
        }
        catch (NamingException e) {
            e.printStackTrace();
            value = "Exception occurred";

        }

        return value;
    }

我得到了返回值"Done with it"

现在我想验证其他我知道邮件 ID 和密码的用户。就像我想使用他们的邮件 ID、密码对其他用户进行身份验证一样,为此我得到了 uidxx 和 passxx 来对他们进行身份验证。我该怎么做?

没有从其他来源获得太多帮助。

谢谢

4

1 回答 1

1

当针对 LDAP 进行身份验证时,常见的工作流程是

  1. 使用您拥有的凭据绑定到 LDAP。该用户必须至少具有对用户子树的只读访问权限。通常是 ou=People、ou=Domain、dc=com 或类似的。
  2. 为用户的 DN 查询 LDAP 服务器(这里是 ANR 可能有用的地方)
  3. 尝试使用提供给您的应用程序的用户 DN 和密码绑定到 LDAP

这是可行的,因为赋予每个用户 RW 权限来访问他在数据库中的对象是很常见的。如果您希望用户能够更改自己的密码,这非常有用。

于 2013-07-25T06:08:38.600 回答