如何使用Java中的AD验证用户身份

问题描述 投票:2回答:5

我正在使用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中所有可用用户的列表

java authentication ldap jndi
5个回答
3
投票

-要验证用户身份

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;

2
投票

我相信此链接可以节省您的时间:http://www.javaxt.com/Tutorials/Windows/How_to_Authenticate_Users_with_Active_Directory您可以验证用户并列出域的用户。


2
投票

-要进行验证,您需要为每个试图登录的用户创建dir上下文,就像您在问题中提到的那样。


2
投票

为什么您不为每个用户使用相同的身份验证。


2
投票

大多数servlet容器可以配置为通过LDAP进行身份验证,这比滚动您自己的身份验证代码要安全得多,并且可靠性更高。

© www.soinside.com 2019 - 2024. All rights reserved.