关于Java:如何通过LDAP将userWorkstation通过LDAP传递到Active Directory进行登录?

 2021-04-27 

How to pass userWorkstation through LDAP to Active Directory for login?

关于此问题的类似问题。

LDAP / Java身份验证:如何指定工作站?

为什么需要在" userWorkstations"中包含AD服务器?

我有一个产品可以处理使用LDAP的客户端的用户身份验证。客户端计算机不会直接针对Active Directory进行身份验证。产品服务器处理登录请求,代表该用户直接针对LDAP进行身份验证。问题是一个客户在Active Directory中打开了一个用户工作站白名单。由于LDAP请求来自产品服务器而不是客户端计算机,因此用户工作站检查失败。下面是我尝试将用户工作站值作为环境变量传递的代码,但在客户环境中不起作用。如何为Active Directory正确传递属性?

部分代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        env.put(Context.REFERRAL,"follow");
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

        env.put(Context.PROVIDER_URL, url);
        env.put(Context.SECURITY_AUTHENTICATION, authentication);

        // Specify the Security Protocol
        if (!protocol.equals(""))
            env.put(Context.SECURITY_PROTOCOL, protocol);

        // Use whatever was passed to us
        env.put(Context.SECURITY_PRINCIPAL, dn);
        env.put(Context.SECURITY_CREDENTIALS, password);

        String userWorkstations ="test.example.com";
        env.put("userWorkstations", userWorkstations);
        env.put("User-Workstations", userWorkstations);
        log.info(String.format(
                   "Found property server.ldap.user.workstations. Adding value %s to the LDAP context.",
                    userWorkstations));
        log.info("Context dump:" + env);

        // Get a reference to a directory context
        dirContext = new InitialDirContext(env);

我也试图解决这个问题,但是得出的结论是,这没有任何意义。

如果能够发送用户的工作站名称,则可以在每台计算机上进行身份验证。

我认为您的解决方案是将运行服务器软件的计算机的名称添加到活动目录中每个参与用户的"登录到"列表中。