我正在使用JNDI库从Java Webapp访问AD。我使用技术用户通过LDAP对AD进行身份验证,如下所示:
Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT);
ldapEnv.put(Context.PROVIDER_URL, providerUrl);
ldapEnv.put(Context.SECURITY_AUTHENTICATION,
SECURITY_AUTHENTICATION_SIMPLE);
ldapEnv.put(Context.SECURITY_PRINCIPAL, principal);
ldapEnv.put(Context.SECURITY_CREDENTIALS, credentials);
return new InitialDirContext(ldapEnv);
我使用此用户从AD中读取和写入。
但是在那之后,我不知道如何验证使用其用户名和密码真正访问我的Web应用程序的最终用户。
我阅读了有关使用Context类的find方法的信息,但不确定如何做或如何构建搜索过滤器。例如
(&(cn= ....
我也不知道如何为广告中的所有用户查找。我想在我的Web应用程序中显示AD中所有可用用户的列表
-要验证用户身份
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "LDAP://url/");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "domain\\user_name");
env.put(Context.SECURITY_CREDENTIALS, "password");
InitialLdapContext ctx = new InitialLdapContext(env,null);
boolean authenticated = (ctx != null) ? true : false;
我相信此链接可以节省您的时间:http://www.javaxt.com/Tutorials/Windows/How_to_Authenticate_Users_with_Active_Directory您可以验证用户并列出域的用户。
-要进行验证,您需要为每个试图登录的用户创建dir上下文,就像您在问题中提到的那样。
为什么您不为每个用户使用相同的身份验证。
大多数servlet容器可以配置为通过LDAP进行身份验证,这比滚动您自己的身份验证代码要安全得多,并且可靠性更高。