使用JNDI在AD中创建一个用户帐户并且密码的最小年龄为
所以我想在Windows 2003中创建一个使用JNDI的活动目录的用户帐户。我遵循以下示例:http://forums.sun.com/thread.jspa?threadID=582103(第一篇文章)。下面的代码抛出了一个LDAP错误,我相信是由于创建用户的鸡和蛋问题,然后设置受密码最小年龄限制为1天的密码。使用JNDI在AD中创建一个用户帐户并且密码的最小年龄为
//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上创建密码最小年龄的用户的经验?任何帮助将非常感激。
我几个月前用Java来管理AD服务器。
它运作良好,但要知道一件重要的事情:密码是AD“受保护”属性:
- 它不可能通过LDAP协议
- 它可以设置读取/更新只有与SSH保护连接。
因此,在您的Java代码中,您必须使用“https:// ...”地址访问AD,并在您的JNDI连接属性中指定SSH协议。该过程在这里解释说:http://java.sun.com/products/jndi/tutorial/ldap/security/ssl.html
// Specify SSL
env.put(Context.SECURITY_PROTOCOL, "ssl");
你需要使用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保护的连接。
我正在使用SSL,它可以与现有用户一起使用。当我打开和关闭'在下次登录时更改密码'时,我也可以改变我创建的用户的密码。所以我知道这不是SSL问题。 – Loomer 2010-09-17 17:50:44