Apache DS文档(高级指南,第2章)详细提到了可以为密码策略配置设置的所有属性。
虽然其中一些工作,即我们成功设法在可配置数量的错误密码尝试后锁定自己,我们发现其中一个不起作用?或者我们错误地使用它?
这是pwdExpireWarning属性。文档提到如下(错误地指定为布尔值,当它应该是以秒为单位的数字?)。
“ads-pwdExpireWarning boolean 0密码到期前的最大秒数,以及过期警告消息将返回给身份验证的用户(0表示不会向用户发送任何消息)”
如果我们将ads-pwdMaxAge设置为120(仅用于测试目的),我们会正确地注意到密码确实在120秒后过期。
但是,我们还将ads-pwdExpireWarning设置为60,希望在60秒后,当我们尝试登录时(使用Java JNDI代码),我们会收到一个错误代码,表示密码即将过期的警告。我们没有这样的警告,或者我们应该在哪里注意到这一点?如果标记了这样的警告,Java代码应该在哪里查询?
有谁知道这是否是一个已知问题,在当前最新版本的Apache DS中,不支持ads-pwdExpireWarning属性?
答案 0 :(得分:1)
正如@EJP所提到的,您需要传递密码策略控制以及您的请求。
使用Apache LDAP API很容易实现(如果可能尝试远离JNDI)。看一下这个example
答案 1 :(得分:0)
可能是服务器在成功验证后才启动计数器,这是唯一有效的过期警告。
答案 2 :(得分:0)
您需要使用额外的请求控件来获取密码策略警告。遗憾的是,你必须自己编写它们,因为JNDI没有提供它们,并且它不是开玩笑,因为你必须应对ASN.1解析。我自己编写了一个set of these,但是它们适用于OpenLDAP,而不是ApacheDS,它使用不同的属性名称,不确定它们是否适用于此。
答案 3 :(得分:0)
如上所述,我在使用另一个答案中提供的LDAP API示例时遇到了问题(尽管它看起来非常有用)。我正在使用的pom.xml依赖项如下......
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.directory.api</groupId>
<artifactId>api-ldap-client-all</artifactId>
<version>1.0.0-M17</version>
</dependency>
<dependency>
<groupId>org.apache.directory.api</groupId>
<artifactId>api-ldap-extras-util</artifactId>
<version>1.0.0-M17</version>
</dependency>
<dependency>
<groupId>org.apache.directory.api</groupId>
<artifactId>api-ldap-extras-codec-api</artifactId>
<version>1.0.0-M17</version>
</dependency>
<dependency>
<groupId>org.apache.directory.api</groupId>
<artifactId>api-ldap-extras-codec</artifactId>
<version>1.0.0-M17</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core-integ</artifactId>
<version>2.0.0-M2</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-all</artifactId>
<version>2.0.0-M12</version>
</dependency>