2013-07-25 25 views
0

我是LDAP验证的新用户。我想用他们的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和密码是我所知道的。 它就像我想验证其他用户使用他们的mailid,密码,并为此我得到了uidxx和passxx来验证它们。 我应该怎么做?

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

谢谢

回答

0

当对LDAP常见的工作流程认证是

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

这工作,因为这是很常见的给绑定到LDAP每个用户在数据库中的RW权限。如果您希望用户能够更改自己的密码非常有用。

+0

感谢tomas789。我只读了数据库服务器的访问权限。我的凭证是uidxx,passxx和应用程序,如上所述。现在,这些凭证用于验证我的身份,以便使用他们的邮件ID和密码验证其他用户。上述代码验证了我的成功。现在我想在我的应用程序中验证其他人。我应该怎么做? –

+1

@Optimus我很确定我已经回答了这个问题。在上述第1步中,您使用您的凭证进行绑定,并在第3步中使用USER的凭证进行绑定。如果它成功用户提供的有效凭证,否则他没有。如果你已经知道这一点,你可以直接跳到步骤3(当用户提供电子邮件地址或名称或类似的东西时,这个步骤通常不是特别的),所以步骤1和步骤2只需获取用户的DN(不是你的) – tomas789