针对 Active Directory 的 LDAP 身份验证可接受的 SECURITY_PRINCIPAL 格式是啥?
Posted
技术标签:
【中文标题】针对 Active Directory 的 LDAP 身份验证可接受的 SECURITY_PRINCIPAL 格式是啥?【英文标题】:What are the accepted SECURITY_PRINCIPAL formats for LDAP Authentication against Active Directory?针对 Active Directory 的 LDAP 身份验证可接受的 SECURITY_PRINCIPAL 格式是什么? 【发布时间】:2013-03-23 17:21:59 【问题描述】:我正在尝试通过 LDAP 针对 Active Directory 对用户进行身份验证。以下是我使用的代码sn-p:
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 文档的参考。还是我可以在某处查找的配置?谢谢!
【问题讨论】:
【参考方案1】:来自 [MS-ADTS: Active Directory Technical Specification],我猜是 AD 的官方文档。
http://msdn.microsoft.com/en-us/library/cc223499.aspx
“5.1.1.1.1 简单验证”部分列出了简单验证支持的所有名称形式。
【讨论】:
【参考方案2】:我认为您需要检查 LDAP 主体模板。它指定 LDAP 服务器所需的主体身份验证模板。主体身份验证模板是安全主体(正在登录的人)的身份验证信息必须传递给 LDAP 服务器的格式。默认值为 $email,这是 Microsoft Active Directory 所需的格式。其他 LDAP 服务器需要不同的身份验证模板。请咨询您的网络管理员以了解有关您的 LDAP 服务器的更多信息。
【讨论】:
以上是关于针对 Active Directory 的 LDAP 身份验证可接受的 SECURITY_PRINCIPAL 格式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
针对 Active Directory 的 LDAP 身份验证可接受的 SECURITY_PRINCIPAL 格式是啥?
在 .NET Core 1.0 应用程序中针对 Active Directory 进行身份验证?
PHP - 针对 Windows 2003 Active Directory 的 LDAP 身份验证(用户 ID 不同于名字和姓氏)
Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证