【问题标题】:LDAP/Java auth: How to specify workstation?LDAP/Java auth:如何指定工作站?
【发布时间】:2012-10-16 06:09:58
【问题描述】:

我们有一个小型 LAN,每个用户都通过 Active Directory 服务器登录 Windows。我希望能够以同样的方式从 Java 代码验证用户。我是通过以下方式执行此操作的:

Hashtable <String, String> env = new Hashtable <>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.0.1:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "user1");
env.put(Context.SECURITY_CREDENTIALS, "pass1"));
env.put(Context.REFERRAL, "ignore");
try {
    new InitialDirContext(env).close();
    return true;
} catch (AuthenticationException ex) {
    return false;
}

其中user1pass1 是用户凭据。

在本地管理员通过为每个用户明确设置允许的工作站列表来限制访问之前,这一直很好。现在用户仍然可以登录 Windows,但我的代码(在允许的工作站上执行)产生了

javax.naming.AuthenticationException: [LDAP: error code 49 - ...:
    LdapErr: ...,
    comment: AcceptSecurityContext error,
    data 531,
    ...]

"data 531" means "not permitted to logon at this workstation".

所以问题是:当设置了用户允许的工作站时,我应该如何在 LDAP 服务器上对用户进行身份验证?我应该以某种方式将当前工作站传递给 LDAP 服务器还是什么?

【问题讨论】:

  • 也许你真的不被允许在那个工作站登录?
  • 我使用与登录 Windows 相同的登录名/密码(本机,通过相同的 ActiveDirectory 服务器),所以事实并非如此。

标签: java authentication active-directory ldap


【解决方案1】:

userWorkstations 属性中的 AD 中设置了允许的工作站参数。

因此,您可能需要将托管您的 java 代码的服务器名称设置为登录用户的 AD 中的 userWorkstations 属性。

更多详情请参考以下链接

Can't get connection with AD from Java code

【讨论】:

    【解决方案2】:

    我希望能够以同样的方式从 Java 代码中对用户进行身份验证。

    那么您需要 Kerberos 而不是 LDAP 绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 2017-05-20
      • 2019-11-24
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多