在Sun one LDAP中将passwordMustChange属性设置为“on”不会产生任何预期效果

在Sun one LDAP中将passwordMustChange属性设置为“on”不会产生任何预期效果,ldap,jndi,Ldap,Jndi,我使用JNDI框架与专门针对Sun one LDAP的各种LDAP服务器进行交互,我观察到以下几点: 用例:如果管理员重置Sun One LDAP服务器中任何用户的密码,则passwordMustChange属性设置为on。因此,用户必须在下次登录时更改其密码。这是有记载的 我使用JNDI通过JAVA代码执行相同的操作。我注意到该属性已成功设置为on。因此,编程逻辑是正确的 但当我在LDAP服务器上与该用户登录时,它不会给出任何错误或弹出消息,表明密码已过期,请更改您的密码。 对于Active

我使用JNDI框架与专门针对Sun one LDAP的各种LDAP服务器进行交互,我观察到以下几点:

用例:如果管理员重置Sun One LDAP服务器中任何用户的密码,则passwordMustChange属性设置为on。因此,用户必须在下次登录时更改其密码。这是有记载的

我使用JNDI通过JAVA代码执行相同的操作。我注意到该属性已成功设置为on。因此,编程逻辑是正确的

但当我在LDAP服务器上与该用户登录时,它不会给出任何错误或弹出消息,表明密码已过期,请更改您的密码。 对于Active Directory AD服务器,同样的用例也可以正常工作 如果是AD,我们需要将pwdLastSet设置为0。它工作,系统要求在下次登录时更改密码

相反,相同的用例不适用于任何LDAP风格,如Sun One LDAP、ADAM或Open LDAP。
请让我知道是否有人注意到此类问题,并建议我如何解决此问题。

不幸的是,此类功能没有标准,有一个internet草稿已过期,并且部分在不同的服务器上实现。 根据您的Sun Directory Server版本的不同,有不同的方法来实现这一点。SunDS 6.x基于Internet草稿引入了新的密码策略。 对于5.x,我似乎记得当密码过期时,passwordExpirationTime将采用特定的值。服务器将返回绑定响应的PasswordExpired控件部分,说明它已过期


对于6.x及更高版本,pwdReset操作属性设置为true。如果您在绑定请求中设置了PwdPolicyControl请求,服务器将返回PasswordExpired控件或PwdPolicyControl响应。

您将其设置在错误的位置。passwordMustChange是策略的属性,而不是用户的属性。这意味着,如果您为任何用户设置操作属性pwdReset,他必须在下次登录时更改密码,并且在他这样做时,会通过响应控件通知您

这反过来意味着您必须在绑定用户时使用密码策略请求控件,并检查响应控件。这还意味着您在更改密码时必须使用更改密码扩展操作,而不仅仅是重写属性

这也解释了为什么您认为必须将objectClass=passwordPolicy添加到用户条目中。你没有。您必须定义一个单独的策略对象,其中包含passswordMustChange和其他策略属性的值,并在配置中将其指定为默认策略,或者在用户条目中指定为其特定的策略(如果要执行此操作)

您需要重新阅读并清楚区分策略属性和用户操作属性。它们是分开列出的


扩展操作和请求/响应控件使用的代码是什么?我必须写我的。几年前我在Sun Java论坛上发布了它:这是代码吗?只是好奇。

在OpenLDAP中适用于我。我明天会找出我的密码。您使用的是密码策略扩展操作和请求/响应控件吗?您是说对于OpenLDAP,您已经观察到了预期的行为吗?您使用了哪个参数?pwdReset或passwordMustChange?对我正在使用密码策略扩展操作以及请求/响应控制。如果你能分享你的代码,这将是非常有帮助的!在OpenLDAP中为我工作。我正在使用这两个属性。稍后再编码。完全改变你的问题是不可接受的,这样会使之前所有的答案和评论变得毫无意义,你的标题也是不可接受的。如果你有一个新问题,问一个新问题。为此道歉。我想用新的查询继续相同的线程,但找不到方法,所以编辑了相同的问题谢谢你的回答。我们希望为所有LDAP服务器实现,如OpenLDAP、Sun One、ADAM和其他服务器。在开放LDAP的情况下,即使pwdReset设置为true也不适合我们。对于SunOne LDAP,我甚至观察到,如果帐户没有ObjectClass=password策略,那么系统甚至不允许设置任何参数,例如passwordMustChange。最后,对于ADAM,它甚至不允许我们设置pwdLastSet=0。如果pwdLastSet设置为0,它将抛出以下错误String@BND向用户添加objectClass=passwordPolicy肯定是不对的。这是针对密码策略条目本身的,而不是针对用户的。您一定有其他配置问题。请同意。Sun Directory Server在密码策略的定义和对其实施密码策略的用户之间有完全的分离。在帐户中,您只能找到维护策略状态的操作属性密码更改时间、过期时间、锁定状态、重置…@LudovicPoitou互联网草稿也是如此。它不受限制
致Sun DS。@EJP,我知道,因为我的名字在Internet草稿上;-并非所有服务器都实现了这些草案,最初是从记录Netscape/Sun/IPlanet服务器中的内容开始的。谢谢。很抱歉,我们没有使用扩展操作。下面的JAVA代码将passwordMustChange设置为on BasictAttribute passwordMustChange=new BasictAttribute passwordMustChange,on;ModificationItem modItem=new ModificationItemDirContext.REMOVE_属性,passwdMustChange。。。然后使用modifyAttributes和其他属性(如userPassword)更新相同的属性。您是说,对于所提到的用例,必须使用扩展操作和请求/响应控制吗?我找不到扩展操作的好例子,我已经回答了每一个问题。如果你不那样做,它就不会起作用。您不必编写代码来设置passwordMustChange:您可以使用LDAP浏览器在策略条目中设置它,如果您将密码策略创建为.ldif,则可以使用ldapadd。这不是你要动态改变的东西。无需任何代码。我可以执行extendedOperation并从OpenLDAP获取PasswordResponseControl,但它不能按预期工作。我应该得到NoPermissionException,但我没有得到任何错误,只是得到警告,因为timeBeforeExpiration=84。第二,即使定义默认密码策略,我也看不到在更改用户密码后,pwdMustChange设置为TRUE。