Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于针对Active Directory的LDAP身份验证,什么是公认的安全性原则格式?_Java_Authentication_Active Directory_Ldap - Fatal编程技术网

Java 对于针对Active Directory的LDAP身份验证,什么是公认的安全性原则格式?

Java 对于针对Active Directory的LDAP身份验证,什么是公认的安全性原则格式?,java,authentication,active-directory,ldap,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, "simp

我正在尝试通过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()
    }
}
private DirContext bindauser(字符串bindPrincipal,字符串密码){
Hashtable env=新的Hashtable();
环境put(Context.SECURITY_认证,“simple”);
环境保护(Context.SECURITY_PRINCIPAL,bindPrincipal);
env.put(Context.PROVIDER\uURL,bindUrl);
环境放置(Context.SECURITY\u凭证、密码);
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
环境投入(Context.reference,“follow”);
试一试{
返回新的InitialLdapContext(env,null);
}捕获(NamingE例外){
e、 printStackTrace()
}
}
如果我提供以下内容,则绑定代码将起作用:

  • 下层登录名,即
    NetBIOSDomainName\sAMAccountName
    (例如域\用户名),或
  • userPrincipalName
    (例如。username@abc.com),或
  • 区分名称
    (例如CN=用户名,OU=xxx,DC=abc,DC=com),或
  • objectSid
    (例如S-1-5-21-3623811015-3361044348-30300820-1013)
作为
SECURITY\u主体
,如果使用了
sAMAccountName
(例如username)则失败(我想只有林中唯一的名称才有效)


那么
安全性原则的公认模式是什么?我搜索了一些类似的问题,但没有一个提供官方AD/LDAP文档的参考。或者它是我可以在某处查找的配置?谢谢

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

来自[MS-ADTS:Active Directory技术规范],我想这是AD的官方文档


“5.1.1.1.1简单身份验证”部分列出了简单身份验证支持的所有姓名表。

Hey@Fung,我也面临同样的问题,您是否找到了使用sAMAccountName的解决方案?