Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LDAP/AD-如何确定用户名或密码是否不匹配_Java_Active Directory_Ldap_Java Security - Fatal编程技术网

Java LDAP/AD-如何确定用户名或密码是否不匹配

Java LDAP/AD-如何确定用户名或密码是否不匹配,java,active-directory,ldap,java-security,Java,Active Directory,Ldap,Java Security,在我的应用程序中,我使用LDAP绑定身份验证机制。我经常收到AuthenticationException,即使其中任何一个不匹配(用户名或密码) 我想显示错误消息,用户名不匹配或密码不匹配。当前,使用AuthenticationException无法获取正确的详细信息 是否有任何现有的API会有所帮助?或者需要使用API进行查询 提前感谢。如果用户提供用户名和密码进行身份验证,最好不要告诉他们登录失败的确切原因。您总是告诉他们用户名和密码不匹配,因此攻击者无法了解特定用户名是否存在。如果用户提


在我的应用程序中,我使用LDAP绑定身份验证机制。我经常收到AuthenticationException,即使其中任何一个不匹配(用户名或密码)
我想显示错误消息,用户名不匹配或密码不匹配。当前,使用AuthenticationException无法获取正确的详细信息

是否有任何现有的API会有所帮助?或者需要使用API进行查询


提前感谢。

如果用户提供用户名和密码进行身份验证,最好不要告诉他们登录失败的确切原因。您总是告诉他们用户名和密码不匹配,因此攻击者无法了解特定用户名是否存在。

如果用户提供用户名和密码进行身份验证,最好不要告诉他们登录失败的确切原因。您总是告诉他们用户名和密码不匹配,因此攻击者无法了解特定用户名是否存在。

我同意最好的做法是不告诉原因

--

但如果你无论如何都要这么做:

使用用户名执行
搜索
,检查用户名是否存在。如果它不存在,那就是一个错误

如果用户存在,并且它继续进行身份验证,但您得到了AuthenticationException,则这是一个错误的密码

--

编辑:

您需要另一个具有权限的ldap连接来检查用户的所有请求

boolean checkUserExists(String username) {
    //...
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_username); 
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_password); 
    //...
    adminconn = new InitialLdapContext(ht_administrator, null);
    return adminconn.search(
        "uid="+username+",ou=people,dc=example,dc=com", "(objectclass=*)", searchControls
    ).hasMore();
}

我同意最好的做法是不说出原因

--

但如果你无论如何都要这么做:

使用用户名执行
搜索
,检查用户名是否存在。如果它不存在,那就是一个错误

如果用户存在,并且它继续进行身份验证,但您得到了AuthenticationException,则这是一个错误的密码

--

编辑:

您需要另一个具有权限的ldap连接来检查用户的所有请求

boolean checkUserExists(String username) {
    //...
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_username); 
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_password); 
    //...
    adminconn = new InitialLdapContext(ht_administrator, null);
    return adminconn.search(
        "uid="+username+",ou=people,dc=example,dc=com", "(objectclass=*)", searchControls
    ).hasMore();
}
Microsoft Active Directory中的提供了该信息

“例外情况是[LDAP:错误代码49-80090308:LDAPPER:DSID-0Cxxxxxx,注释:AcceptSecurityContext错误,数据,向量]。”

数据值将通知问题。

来自Microsoft Active Directory的将提供该信息

“例外情况是[LDAP:错误代码49-80090308:LDAPPER:DSID-0Cxxxxxx,注释:AcceptSecurityContext错误,数据,向量]。”


数据值将通知问题。

我没有在UI中显示哪一个错误,但我的代码需要了解用户名或密码哪一个不匹配我没有在UI中显示哪一个错误,但我的代码需要了解用户名或密码哪一个不匹配对于用户名和密码不匹配,我收到相同的错误消息“javax.naming.AuthenticationException:[LDAP:错误代码49-80090308:LDAPPER:DSID-0C0900334,注释:AcceptSecurityContext error,data 52e,vece”,在不提供密码的情况下,是否有任何方法查询用户id是否存在(与LDAP服务器握手)?对于用户名和密码不匹配,我收到相同的错误消息“javax.naming.AuthenticationException:[LDAP:错误代码49-80090308:LDAPPER:DSID-0C0900334,注释:AcceptSecurityContext error,data 52e,vece”是否有任何方法在不提供密码的情况下查询用户id是否存在(握手LDAP服务器)?我没有全局上下文。在不提供密码的情况下(与ldap服务器握手)是否可以查询用户id?您只需使用管理员用户名和密码实例化
新的InitialLdapContext
,即可进行搜索。这就像使用管理员帐户(或任何具有足够权限的帐户)查询任何用户。我没有全局上下文。在不提供密码(与ldap服务器握手)的情况下查询用户id是否存在的方法?您只需使用管理员用户名和密码实例化
新的InitialLdapContext
,即可进行搜索。这就像使用管理员帐户一样(或任何具有足够权限的帐户)查询任何用户。