针对Active Directory的LDAP身份验证有哪些可接受的SECURITY_PRINCIPAL格式?

时间:2013-04-02 12:06:47

标签: java authentication active-directory ldap

我正在尝试通过LDAP针对Active Directory对用户进行身份验证。以下是我使用的代码段:

private DirContext bindAsUser(String bindPrincipal, String password) {
    Hashtable<String,String> env = new Hashtable<String,String>();
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, bindPrincipal);
    env.put(Context.PROVIDER_URL, bindUrl);
    env.put(Context.SECURITY_CREDENTIALS, password);
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.REFERRAL, "follow");

    try {
        return new InitialLdapContext(env, null);
    } catch (NamingException e) {
        e.printStackTrace()
    }
}

如果我提供的话,绑定代码可以使用:

  • 下级登录名,即NetBIOSDomainName\sAMAccountName(例如域\用户名)或
  • userPrincipalName(例如username@abc.com)或
  • distinguishedName(例如CN = username,OU = xxx,DC = abc,DC = com)或
  • objectSid(例如S-1-5-21-3623811015-3361044348-30300820-1013)

作为SECURITY_PRINCIPAL,但如果使用sAMAccountName(例如用户名)则失败(我猜只有林中唯一的名称才有效)。

那么SECURITY_PRINCIPAL的可接受模式是什么?我搜索了一些类似的问题,但都没有提供官方AD / LDAP文档的参考。或者它是我可以在某处查找的配置?谢谢!

2 个答案:

答案 0 :(得分:11)

从[MS-ADTS:Active Directory技术规范],AD的官方文档我想。

http://msdn.microsoft.com/en-us/library/cc223499.aspx

Section&#34; 5.1.1.1.1简单认证&#34;列出简单身份验证支持的所有名称格式。

答案 1 :(得分:1)

我认为您需要检查LDAP主体模板。它指定LDAP服务器所需的主体身份验证模板。主体身份验证模板是必须将安全主体(登录的人)的身份验证信息传递到LDAP服务器的格式。默认值为$ {email},这是Microsoft Active Directory所需的格式。其他LDAP服务器需要不同的验证模板。请咨询您的网络管理员,以了解有关LDAP服务器的更多信息。