所以我想在 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/