![](/img/trans.png)
[英]Can I change myself Active Directory password from LDAP (without administrative account)
[英]Java with LDAP: change users password without administrative rights?
在Java Web Project内,我试图让用户更改自己的LDAP密码(这是因为密码已过期,还是因为他们只是想这么做)。 这些用户没有管理权限。
我已经能够进行搜索以找到其中一个用户,但是我无法更改其密码。 有什么方法可以让用户在不授予他们管理权限的情况下更改自己的LDAP密码?
这是我现在拥有的代码:
DirContext context;
context = getInitialContext(username, password, ldapPath, ldapDomain);
// Set up search constraints
SearchControls cons = new SearchControls();
String[] attrIDs = { "cn" };
cons.setReturningAttributes(attrIDs);
cons.setSearchScope(SearchControls.ONELEVEL_SCOPE);
String USERS_OU = ldapPath.split("/")[ldapPath.split("/").length-1];
NamingEnumeration<?> results = context.search(USERS_OU, "sAMAccountName=[name]", cons); //I'm searching the sAMA for testing purposes
while (results.hasMore()) {
SearchResult result = (SearchResult) results.next();
Attributes attrs = result.getAttributes();
String userCN = attrs.get("cn").get(0).toString();
// Here I'm able to retrieve a user's CN
ModificationItem[] mods = new ModificationItem[2];
Attribute mod0 = new BasicAttribute("userPassword", password);
Attribute mod1 = new BasicAttribute("userPassword", newPass);
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, mod0);
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, mod1);
context.modifyAttributes([CN + ldapPath], mods );
}
提前致谢!
更新:我已经检查了rkosegi标记的问题,但是我认为该解决方案不适用于此处,因为OP试图将其更改为“ unicodePwd”而不是“ userPassword”,并且“ unicodePwd”要求连接为ldaps。
我在研究中发现了一件事,那就是在.NET上有一个特殊的操作DirectoryEntry.Invoke方法,它是可能的操作“ ChangePassword”之一,不需要管理员权限。 也许Java上有类似的东西?
经过详尽的研究,我得出的结论是,基于LDAP服务器的默认配置,codebrane的答案就是正确的答案。
我发现有一个指令可以防止用户更改自己的密码,即使该密码已过期也是如此。 ( 本文档说明了如何确定是否已启用)
因此解决方案是,要么更改指令以允许用户更改自己的密码,要么使用特权凭证进行更改。
谢谢!
通常,您以特权用户身份绑定,并使用该用户更改其他用户的密码。 您可以找到没有特殊权限的用户,这很可能是因为它允许匿名绑定和搜索。 更改用户密码需要使用特权帐户来完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.