当前位置: 首页 > 知识库问答 >
问题:

如何在Java中对AD进行身份验证

丌官玺
2023-03-14
    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);
(&(cn= ....

共有1个答案

姬锐
2023-03-14

-对用户进行身份验证

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;

-获取所有用户的姓名

public ArrayList<String> getAllUsers(LdapContext ctx) {
    ArrayList<String> users = new ArrayList<>();
    try {
        SearchControls constraints = new SearchControls();
        constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

        String[] attrIDs = {"cn"};
        constraints.setReturningAttributes(attrIDs);

        NamingEnumeration answer = ctx.search("dc=example,dc=com", "(&(cn=*))", constraints);

        while (answer.hasMore()) {
            Attributes attrs = ((SearchResult) answer.next()).getAttributes();
            users.add(attrs.get("cn").toString().replace("cn:", ""));
        }

    } catch (Exception ex) {
    }
    return users;
}

-搜索特定用途

public String getUserName(String username, LdapContext ctx) {
    try {
        SearchControls constraints = new SearchControls();
        constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

        String[] attrIDs = {"cn"};
        constraints.setReturningAttributes(attrIDs);

        NamingEnumeration answer = ctx.search("OU=Employees,OU=Users,DC=sub_domain,DC=domain,DC=com", "uid=" + username, constraints);

        if (answer.hasMore()) {
            Attributes attrs = ((SearchResult) answer.next()).getAttributes();
            return attrs.get("cn").toString().replace("cn:", "");
        } else {
            return null;
        }

    } catch (Exception ex) {
    }
    return null;
}
 类似资料:
  • 我正在尝试用.NET中的LDAP制作一个简单的身份验证系统。我检查了.NET中的一些名称空间,并简单地制作了标准代码片段,如下所示。 我有一个管理员用户名和密码和,用于对客户端应用程序进行身份验证。我有第二个用户名和密码和,需要在LDAP中检查才能登录。 是管理帐户,只是LDAP中的用户。那么如何检查的密码呢?

  • 我用一个android APP(恩智浦提供的NFC标签信息)读取了我的MIFARE Ultraglith C标签,它显示标签上有恩智浦的默认密钥“BREAKMEIFYOUCAN!”第0x2C至0x2F页。但我仍然无法使用此密钥验证此标签。 具体来说,我得到了以下结果: 第一个认证命令:1A00 第一个认证命令的响应:AFCCF489BFB7B98605 ek(RndB):CCF489BFB7B98

  • 我正在使用Jersey用Java编写一个RESTful应用程序,我需要对用户进行身份验证。我知道我可以使用注释@RolesAllowed来指定资源中的角色,但是我不明白用户是如何与特定角色相关联的。客户端以这种方式发送用户名和密码 假设某些方法只能由超级用户使用,而其他方法只能由任何用户使用,那么当用户名和密码由客户端发送时,我如何区分它们?

  • 我正在构建一个spark库,开发人员将在编写他们的spark作业时使用该库来访问Azure data Lake上的数据。但是身份验证将取决于他们要求的数据集。我需要从spark job中调用rest API,以获取凭据并进行身份验证,以便从ADL中读取数据。这可能吗?我是新来的火花。

  • 问题内容: 我想使用带有身份验证的其余api。我正在尝试包括标头,但没有得到任何回应。它抛出的输出通常是在没有身份验证时抛出的。谁能建议我一些解决方案。下面是我的代码 问题答案: 该请求模块将使您的生活更轻松。现在,它包括“ 基本身份验证”作为选项,因此您不必自己构建标题。 安装请求执行

  • 在这里尝试看看是否有人已经用Rundeck对AD进行了LDAP身份验证。我正在使用RunDesk的JRE运行方法。以下是我到目前为止所做的工作: 我已经设置了jaas-ldap.conf,如Rundeck authentication users页面所示 我已向管理员请求ssl证书。要使用ldaps,rundeck需要ssl证书,这是在他们的站点上编写的。获得证书后,他们提到以下两个步骤: 一旦获