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 字段?

在新页面上重置“运行总计字段”

如何通过按 Escape 键重置 QLineEdit 文本?

TSQL - 我如何对绝对值以外的值求和