所以我想在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(无法执行),我认为密码是最小密码期限。真正奇怪的是,如果我作为域管理员进入活动目录用户和计算机,我也无法设置密码。我可以改变它的唯一方法是,如果我选择重置密码'选项,然后启用'用户必须在下次登录时更改帐户'。设置完之后,我可以通过编程方式和GUI设置密码。
我还尝试在创建后的下一次登录时设置更改密码,但在我的代码中更改了密码之前,但这也无效。它确实改变了框,但我仍然无法更改密码并得到5003错误。
有没有人使用JNDI在Windows 2003上创建密码使用期限最短的用户?任何帮助将不胜感激。
答案 0 :(得分:1)
我几个月前用Java来管理AD服务器。
效果很好,但有一点需要注意:密码是AD中的“受保护”属性:
因此,在Java代码中,您必须使用“https:// ...”地址访问AD,并在JNDI连接属性中指定SSH协议。此过程在此处说明:http://java.sun.com/products/jndi/tutorial/ldap/security/ssl.html
// Specify SSL
env.put(Context.SECURITY_PROTOCOL, "ssl");
答案 1 :(得分:0)
您需要使用SSL连接来修改unicodePwd属性的值
请看这个链接:
https://msdn.microsoft.com/en-us/library/cc223248.aspx
Windows 2000操作系统服务器要求客户端具有到DC的128位(或更好)SSL / TLS加密连接,以便修改此属性。在Windows Server 2003操作系统,Windows Server 2008操作系统,Windows Server 2008 R2操作系统,Windows Server 2012操作系统,Windows Server 2012 R2操作系统和Windows Server 2016操作系统上,DC还允许修改unicodePwd属性受128位(或更好)简单身份验证和安全层(SASL)层加密而非SSL / TLS保护的连接。