LDAP:如何重置 pwdReset 字段的值
Posted
技术标签:
【中文标题】LDAP:如何重置 pwdReset 字段的值【英文标题】:LDAP: How to reset value of pwdReset field 【发布时间】:2016-12-16 07:23:23 【问题描述】:我正在尝试编写一个应用程序,它可以让用户管理 LDAP 系统上的用户。其中一个特点是“忘记密码”功能。
-
用户使用我的应用重设密码
我问了一些安全问题,如果它们正确,我会将他重定向到新屏幕 - 新密码屏幕。
用户只提供新密码(因为他忘记了旧密码)
我使用 admin Context 并重置用户密码(使用
modifyAttributes(..)
)。
LDAP系统,将pwdReset
设置为true
,表示密码由管理员修改,必须由用户修改。
现在,我确实想将其设置为 false,因为我不想让用户再次更改他的密码(正如他在上述步骤中所做的那样),所以我明确地将其修改为 false。但我得到错误
javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - Object Class Violation]; remaining name 'cn=XXXX,ou=XXXXOU,O=XXXX'
有什么办法?还有其他选择吗?
供参考,重置pwdReset
的代码如下:
List<ModificationItem> modsList = new ArrayList<ModificationItem>();
BasicAttribute attribute = new BasicAttribute(ATTR_PASSWORDRESET, "false");
modsList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attribute));
ModificationItem [] modsArr = modsList.toArray(new ModificationItem[modsList.size()]);
modsArr = modsList.toArray(new ModificationItem[modsList.size()]);
this.adminCtx.modifyAttributes(userName, modsArr);
这是我的pwdPolicy
【问题讨论】:
所以您根本没有使用openldap,您使用的是IBM 产品?不要乱加标签。 【参考方案1】:我刚刚花了两周时间向自己证明 OpenLDAP 实际上根本没有执行第 5 步,尽管 RFC 草案的措辞似乎是什么意思。我还在 OpenLDAP 邮件档案中发现了一条消息,确认他们认为不应该这样做。所以发生的事情是没有pwdReset
属性设置为false,因此您尝试使用该值添加 时遇到架构冲突。所以,你所要做的就是什么。
将pwdReset
设置为null 可能会更安全,这会完全删除它,或者使用DirContext.REMOVE_ATTRIBUTE
将其删除。我的代码没有使用ModificationItem
,这是另一个线索,更像是:
BasicAttributes attributes = new BasicAttributes(ATTR_PASSWORDRESET, null);
this.adminCtx.modifyAttributes(userName, attrs);
以上也意味着如果你想将它设置为TRUE
你必须自己这样做。
【讨论】:
我在 LDAP 系统上,当我(作为管理员)重置用户密码时,它确实将pwdReset
设置为 true。我试过你的代码,但它给出了同样的异常
我添加了截图
顺便说一句,我相信,在你的情况下,OpenLDAP 没有做任何事情,因为没有启用密码策略
我系统中的密码策略覆盖已启用六年。我正在使用扩展密码修改操作更改密码。
那么我不确定为什么在我的情况下它没有将pwdReset
设置为true
...因为在我的情况下它设置为true
..以上是关于LDAP:如何重置 pwdReset 字段的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在按钮单击时重置 reactstrap 中选择和输入组件的值?
Angular:如何重置 matChipList 输入字段和 Google Recaptcha?
在 Apache Shiro 中使用 ActiveDirectoryRealm 时如何搜索 ldap 字段?