从 Active Directory 检索密码过期警告

Retrieving password expiry warning from Active Directory

我有一个使用 Active Directory 对用户进行身份验证的系统。现在我必须使用 AD 的安全设置来警告用户他的密码将在几天后过期。向用户显示通知时密码过期之前的时间定义如 this article 中所述。 我想读取 "Interactive logon: Prompt user to change password before expiration" 中设置的值 来自 AD 使用 javax.naming.directory.InitialDirContext。我希望这个值在 AD 中被记住,但我不知道如何找到它。我正在查看一组 AD 属性,但似乎没有人匹配此信息。是否可以从 AD 中检索此值?

这比较复杂,因为此设置不直接保存在 Active Directory 中。这是组策略的一部分(考虑到它是在策略中配置的,而不是在本地计算机上配置的),它保存在网络共享中并在 Active Directory 中链接。

举一个简单的例子,你可以这样进入:

  1. 阅读您想要的 OU 并检查 gPLink 属性。该值类似于按优先级降序链接到所选 OU 的组策略对象列表。每个值都类似于:[LDAP://CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=internal,DC=local;0]。第一部分是 GP 位置,最后一部分似乎是一个标志(2 表示该策略已强制执行)。
  2. 读取策略对象并检查 gPCFileSysPath 属性。这是存储策略设置的位置。就像 \internal.local\sysvol\internal.local\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}.
  3. 检查第 2 点的文件存储并查找 MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf 文件。这是一个常规的 inf/ini 文件,调查 [Registry Values] 部分找到一行内容为:MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,14。此 14 是一项策略设置(在到期前 14 天提示更改密码)。

现在,要获得实际的政策结果集,事情会变得复杂起来。策略是从父级继承的,这意味着在第 1 点。您应该检查预期的 OU 及其所有父级 OU 以及域节点本身,以适当的顺序评估所有 gPLinks,可能还考虑到它们WMI 筛选器,无论它们是否应用,以找出有效的值。

如果您的应用程序恰好在 Windows 上 运行 可以置于同一组策略下,那么只从注册表中读取信息可能会更容易,因为这已经被应用系统.

无论如何,考虑到从 AD 获取值的复杂性,我会考虑只使用一些默认的过期警告期(前提是它完全在组策略中定义,而不仅仅是本地计算机上的默认值).