我正在尝试通过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文档的参考。或者它是我可以在某处查找的配置?谢谢!
答案 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服务器的更多信息。