目前我已经开发了一个 Java WebApplication 来提供更改 AD 控制的密码的功能。 Web 应用程序使用 LDAP 访问来执行此操作。用户需要进行身份验证,然后通过“LdapContext.modifyAttributes()”方法更改其密码。
现在我发现这对于具有初始密码的用户不起作用。初始密码意味着“pwdLastSet”标志被设置为要求下次登录时更改密码。
这就是现在的运作方式。
prop.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
prop.put(Context.PROVIDER_URL, "ldaps://my.active.directory.com:636");
prop.put(Context.SECURITY_AUTHENTICATION, "simple");
prop.put(Context.SECURITY_PROTOCOL,"ADSecurityProtocol");
prop.put(Context.SECURITY_PRINCIPAL,this.userid);
prop.put(Context.SECURITY_CREDENTIALS,password);
ldapContext = new InitialLdapContext(prop, null);
<...snip...>
ModificationItem[] mods = new ModificationItem[2];
String oldQuotedPassword = "\"" + oldPassword + "\"";
byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE");
String newQuotedPassword = "\"" + newPassword1 + "\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE,
new BasicAttribute("unicodePwd", oldUnicodePassword));
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE,
new BasicAttribute("unicodePwd", newUnicodePassword));
ldapContext.modifyAttributes(userDN, mods);
我正在寻找一种想法,如何让用户能够更改密码,尤其是在需要时。我发现一些可能需要 Kerberos 的提示 - 但我几乎对 Kerberos 一无所知。
感谢任何帮助。
乌尔里希
最佳答案
我不太明白这个问题。设置 pwdLastSet 后粘贴的代码不起作用?或者您正在寻找一个想法让用户知道他们必须更改密码?
如果代码不起作用,您是否尝试过 DirContext.REPLACE_ATTRIBUTE ?
如果您需要一种方法让用户知道,只需捕获异常并在用户界面上显示错误消息即可。
关于java - 如何使用 JAVA Web 应用程序更改初始 Active Directory 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764576/