java - LDAP/Java 身份验证 : How to specify workstation?

标签 java authentication active-directory ldap

我们有一个小型 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 服务器还是什么?

最佳答案

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

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

请参阅以下链接了解更多详情

Can't get connection with AD from Java code

关于java - LDAP/Java 身份验证 : How to specify workstation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12908532/

相关文章:

java - List<Integer> 作为 JRBeanCollectionDataSource 到子报表中,如何获取报表上显示的整数值?

java - 在 GWT 启动时启动后台线程

javascript - 如何使用 CORS 向多个域验证同一用户的身份?

ruby-on-rails - Rails 实例(作者:Michael Hartl),第 9.23 课重定向不起作用

active-directory - 个人资料图片无法在 Teams 和 Sharepoint Online 中同步

ruby - 在 net-ldap for Ruby 中搜索 "Enabled"用户

java - 安装 NetBeans 时如何修复错误?

java - TestNG - 软断言

java - 如何以编程方式加密/解密 JSP 中的纯文本凭据?

c# - 使用 C# 检查 Active Directory 中是否存在 UserID