Authentication 应用程序用户对用户的LDAP身份验证

Authentication 应用程序用户对用户的LDAP身份验证,authentication,ldap,Authentication,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

我不熟悉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;
    }
公共字符串ldap()
{
字符串值=null;
SearchControls约束=新的SearchControls();
Hashtable env=新的Hashtable();
put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.PROVIDER\u URL,“ldap://xx.xx.xx.xx:389");
环境put(Context.SECURITY_认证,“simple”);
环境put(Context.SECURITY_PRINCIPAL,“uid=uidxx,ou=applications,dc=dcxx”);
环境put(上下文安全证书,“passxx”);
试一试{
DirContext ctx=新的初始DirContext(env);
value=“处理完毕”;
} 
捕获(身份验证异常e)
{
value=“无效的用户名或密码”;
}
捕获(NamingE例外){
e、 printStackTrace();
value=“发生异常”;
}
返回值;
}
我得到的返回值为
“处理完毕”

现在,我想对我已知其邮件id和密码的其他用户进行身份验证。 这就像我想用其他用户的mailid和密码对他们进行身份验证一样,为此我让uidxx和passxx对他们进行身份验证。 我该怎么做

没有从其他渠道得到太多帮助


感谢您

针对LDAP公共工作流进行身份验证

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

  • 这是因为给每个用户对数据库中对象的RW权限是很常见的。如果您希望用户能够更改自己的密码,这将非常有用

    谢谢托马斯789。我对数据库服务器具有只读访问权限。我的凭证是uidxx、passxx和问题中提到的应用程序。现在这些凭证是用来认证我的,这样我就可以用他们的邮件id和密码认证其他用户。我通过上面的代码成功地验证了我的身份。现在我想验证我的应用程序中的其他人。“我该怎么做?”擎天柱我很肯定我已经回答了这个问题。正如我上面提到的,在步骤1中,您使用凭据进行绑定,在步骤3中,您使用用户凭据进行绑定。如果成功,则用户提供有效凭据,否则他不会。步骤1和2仅用于获取用户的DN(不是您的DN),如果您已经知道这一点,您可以直接跳到步骤3(当用户提供电子邮件地址或名称或类似内容时,通常不需要这样做)