java - Active Directory - 使用基本 dn 进行身份验证

标签 java active-directory ldap

我编写了一个测试代码,用于通过 Active Directory 服务器验证用户身份。我可以使用下面的代码使用绑定(bind) DN 进行身份验证。

public static void main(String[] args) {

    LdapContext ldapContext = null;

    Hashtable<String, String> env = new Hashtable<String, String>();

    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldaps://10.121.85.24:636");
    env.put(Context.SECURITY_PROTOCOL, "ssl");
    env.put(Context.SECURITY_PRINCIPAL, "EXTLDAPTEST\batty"); // line 1
    env.put(Context.SECURITY_CREDENTIALS, "mypassword");
    env.put("com.sun.jndi.ldap.read.timeout", Integer.toString(8000));
    env.put("java.naming.ldap.factory.socket", "com.auth.server.TrustAllSSLSocketFactory" );

    try {
        ldapContext = new InitialLdapContext(env, null);
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (ldapContext != null)
    {
        System.out.println("Authenticatied");
    }
}

但是当我将第 1 行替换为

env.put(Context.SECURITY_PRINCIPAL, "CN=batty,OU=Unsorted,OU=EDN Users,OU=User accounts,DC=extLDAPTest,DC=local"); // line 1

它抛出异常

javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1

AD的树结构是:

enter image description here

尝试使用完整 dn 进行身份验证时我是否做错了什么?

编辑 1: 当我使用服务帐户使用

获取完整 dn 时
NamingEnumeration<?> aa = context.list("OU=Unsorted,OU=EDN Users,OU=User accounts,DC=extLDAPTest,DC=local");

我得到以下结果:

CN=batty,OU=Unsorted,OU=EDN Users,OU=User accounts,DC=extLDAPTest,DC=local

这与我通过的身份验证相同。

编辑2:我使用完整 dn 的原因是,我将获得服务帐户和子树的 dn。现在,同一用户可以存在于不同的子树中。所以我想从特定的子树对其进行身份验证。

最佳答案

与 LDAP 相关的错误代码 49 是由无效凭据引起的。

但您可以使用 ADSI Edit 或 AD Explorer 等应用程序来获取对象的 DN。您可以仅使用它们来查看相关对象的“distinguishedName”属性,也可以使用特定于每个应用程序的其他方法。

或用户 LDAPExplorerTool 2. 并找出您想要获取 dn 的 CN。您可以在 secDN 属性中获取其值:

enter image description here

关于java - Active Directory - 使用基本 dn 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32969028/

相关文章:

python - LDAP 响应元组 (97, []) 是什么意思?

java - 如何将数据从 XML 文件添加到 ArrayList

java - JBoss AS7 仅适用于 Linux 上的 http ://127. 0.0.1:8080

java - 整个文本文件到Java中的字符串

java - 如何在 Eclipse 中创建一个 Hello World SWT 应用程序?

azure - 将不属于目录中已验证域名的用户(成员)添加到 Azure Active Directory

Java 在 ie 中自动化 Ldap 身份验证

ruby - 如何连接到使用 LDAP 进行身份验证的 HTTP Rest API

azure - 导出多个 Azure AD 组成员

java - Java 中的 LDAP 事务