针对 Active Directory 的 LDAP 身份验证可接受SECURITY_PRINCIPAL格式是什么?

我正在尝试通过 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=用户名,OU=xxx,DC=abc,DC=com),或
  • objectSid(例如 S-1-5-21-3623811015-3361044348-30300820-1013)

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

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


答案 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 服务器的更多信息。


推荐