我正在尝试通过 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
(例如用户名@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 文档的参考。还是我可以在某处查找的配置?谢谢!