java - 使用 JNDI 和最小密码年龄在 AD 中创建用户帐户

标签 java security active-directory jndi user-accounts

所以我想在 Windows 2003 中使用 JNDI 的 Active Directory 创建一个用户帐户。我正在关注以下示例:http://forums.sun.com/thread.jspa?threadID=582103 (第一篇文章)。下面的代码抛出了一个 LDAP 错误,我认为这是由于先有鸡还是先有蛋的问题,即创建用户然后设置受 1 天最小密码期限限制的密码。

//Replace the "unicdodePwd" attribute with a new value
//Password must be both Unicode and a quoted string
String newQuotedPassword = "\"Password2000\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");

mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));
mods[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWORD_EXPIRED)));

// Perform the update
ctx.modifyAttributes(userName, mods);
System.out.println("Set password & updated userccountControl");

当它尝试设置我认为是最短密码使用期限的密码时,我收到 Ldap 错误代码:53 问题 5003(无法执行)。真正奇怪的是,如果我以域管理员身份进入 Activity 目录用户和计算机,我也无法设置密码。我可以更改它的唯一方法是选择“重置密码”选项,然后启用“用户必须在下次登录时更改帐户”。设置好后,我就可以通过编程方式和 GUI 设置密码。

我还尝试在创建之后但在我的代码中更改密码之前在下次登录时设置更改密码,但这也不起作用。它确实更改了框,但我仍然无法更改密码并收到 5003 错误。

有没有人有过使用 JNDI 在 Windows 2003 上创建具有最低密码使用期限的用户的经验?任何帮助将不胜感激。

最佳答案

我几个月前使用 Java 来管理 AD 服务器。

它运行良好,但有一件重要的事情需要知道:密码是 AD 中的“ protected ”属性:

  • 它永远不能被 LDAP 协议(protocol)读取
  • 它可以通过 SSH 保护的连接进行设置/更新。

因此,在您的 Java 代码中,您必须使用“https://...”地址访问 AD,并在您的 JNDI 连接属性中指定 SSH 协议(protocol)。该程序在这里解释:http://java.sun.com/products/jndi/tutorial/ldap/security/ssl.html

// Specify SSL
env.put(Context.SECURITY_PROTOCOL, "ssl");

关于java - 使用 JNDI 和最小密码年龄在 AD 中创建用户帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736726/

相关文章:

java - 在 Active Directory 中查找具有网络 ID 的用户需要搜索过滤器

active-directory - DirectoryEntry memberOf 属性返回完整路径

java - 无法获取信号量 - Zuul 配置

java - 如何修改整个 ProgressBar?

javascript - 我们真的需要隐藏js(jquery)代码吗?

php - 在 iOS -> php -> mySQL 之间安全地传输数据

c# - 从 Active Directory 查询用户的组成员身份

基于Java文本的冒险游戏,我的主要方法下放什么

java - 使用多个可选模式时顺序的重要性

security - outlook如何加密windows凭据的密码