2013-04-10 161 views
0

让我解释我的问题。活动目录ldap登录认证当需要更改密码

我有一个PHP应用程序使用LDAP连接到Active Directory服务器进行身份验证。如果我让用户在下次登录时需要更改密码,在允许密码更改之前,它不会允许我对其进行身份验证。我可以检测到需要更改密码,但是如果我允许用​​户更改密码,那么我无法确定用户是否有效,这意味着只需知道用户的用户名就可以窃取系统那是密码过期。

这对我来说似乎是愚蠢的......是有什么我在想念..

目前我

如果为已过期或不口令绑定到服务器

检查

检查验证用户的详细信息

如果用户帐户设置为在下次登录时更改密码,auth失败但存在密码更改请求,则返回以上内容。

是否有特定的请求需要发送的顺序,所以我可以在密码更改发送之前授权用户?

在此先感谢

回答

1

通过标记帐户Must change password at next login有效没有密码验证所以这并没有转化到网上。

更好的选择是将用户的pwdLastSet属性与域策略进行比较,并强制应用程序中的更改不在AD中。

+0

如果是这种情况,那么我将需要建立一个系统,以像在整个Microsoft操作系统中使用的Windows密码缓存系统一样工作。这将允许我检测密码是否已被请求更改,然后在用户输入新密码时要求输入旧密码。这不会像使用它一样安全,但是没有真正的解决方法。 – 2013-04-11 07:25:09

+0

http://blog.webactivedirectory.com/2011/06/09/windows-active-directory-cached-user-credentials/是我上面的评论涉及到的。 – 2013-04-11 07:27:06

+0

我发现这个问题的另一个解决方案,但它似乎不仅仅是一个修补程序的破解。 如果等于0,则强制将'pwdLastSet' var设置为-1,那么在将其更改回0之前,您仍然可以对细节进行身份验证。此方法也可以应用于自然过期的密码。但在更改之前,它必须记住'pwdLastSet'字段中的前一个值。 – 2013-04-12 07:08:04