我们有一个忘记密码系统,允许用户创建新密码。它通过LDAPS攻击Active Directory。现在,一旦用户创建新密码,我们必须以管理员身份绑定,将密码更改为随机字符串,然后使用该随机字符串绑定到用户帐户,然后将密码更改为他们提供的密码。我们这样做是因为我们有最近5个密码的密码历史记录策略。
现在可以正常工作,但密码历史记录将随机字符串作为以前的密码之一。有没有办法与用户绑定但没有密码?在此之前,用户将通过安全问题进行身份验证。
答案 0 :(得分:1)
我以不同的方式做到这一点。我在用户的条目下创建一个动态对象,在几天后到期,生成的uid属性;向他们发送包含该uid的链接;这会导致更改密码页面,但是通过看到UID参数的其他LoginModule登录,检查它,如果存在并正确登录它们。换句话说就是一种“票证”登录。
执行查找的代码将自身绑定/重新连接为应用程序本身,但这实际上并不重要,因为登录的连接会立即关闭,就像实际应用程序中的所有其他LDAP连接一样。当对用户自己的条目进行任何操作时,例如更改密码,更新配置文件,重新连接是使用我在会话中保存的密码的用户完成的。当用户对LDAP执行任何其他操作时,实际上是应用程序正在执行此操作,因此应用程序绑定/重新连接如上所述。 IOW应用程序本身就是一个用户(甚至是具有不同权限级别的几个不同用户)。
因为UID比密码长得多,并且因为包含它的条目在一两天后过期,所以这一切都比生成临时密码并发送它更安全。如果通过票证登录到达,更改密码页面上也可能存在安全问题。
答案 1 :(得分:0)
AD中有两个密码更改操作 - 重置和更改。重置是一种管理操作(这是你在这里做的)。进行重置时,无需提供当前密码。更改密码是最终用户操作,除了新密码之外,用户还必须提供其当前密码。
如果您更改代码以执行密码重置并在具有重置密码权限的用户的上下文中运行,那么您应该好好去。如果您需要在重置期间遵守密码策略,则可以使用特殊的LDAP控件执行此操作。