【问题标题】:Java JNDI - limitation when changing user's password in Microsoft LDAP - authentication exceptionJava JNDI - 在 Microsoft LDAP 中更改用户密码时的限制 - 身份验证异常
【发布时间】:2014-06-02 11:42:39
【问题描述】:

这是我在这里的第一篇文章。我试图在互联网上搜索我的问题,但没有找到答案。我希望你的专业知识能帮助我。 特别是在使用 Microsoft LDAP 时,我注意到一些烦人的事情。在 LDAP 中,当用户必须在下次登录时重置密码时,有一个标志“用户必须在下次登录时重置密码”,我们称之为标志 X。当为用户设置 X 时,如果我们尝试更改此用户的通行证,我们不能.我想从用户名而不是另一个管理用户来执行此操作-因此用户必须更改通行证,但是如果您尝试更改它,则不能.. 这是我正在做的事情:

Hashtable env = new Hashtable();

env.put(Context.SECURITY_AUTHENTICATION, <auth_mech>);
env.put(Context.SECURITY_PRINCIPAL, <principal>);
env.put(Context.SECURITY_CREDENTIALS, <pass>);

DirContext ctx = new InitialDirContext(env);

尝试创建新的初始上下文时: 身份验证异常 [LDAP:错误代码 49 - 80090308:LdapErr:DSID-0Cxxxxxx,注释:AcceptSecurityContext 错误,数据 773,vece] 数据 773 表示 - 用户必须在下次登录时更改他们的通行证。所以当: - 用户必须在下次登录时更改他们的通行证 - 用户通行证已过期 - 用户帐户被禁用 - 用户帐户已过期 依此类推,我们无法更改用户的密码……这在我看来是一个很大的限制。

另外我想问一下是否有人知道 Micrisoft 遵循的有关此错误代码的规范。我知道错误代码 49 是一般错误代码,并且符合规范,但是数据 773、数据 532 是所有 LDAP 的通用数据,因为我认为它们是特定于供应商的,这又很烦人。

附:我在这里发现了类似的问题: Change AD user expired password in Java 但是在使用可以更改每个人密码的 AD 超级用户时已解决,但我不希望这样,我需要用户能够更改自己的密码,因为这反映在 LDAP 密码历史记录中。

谢谢

【问题讨论】:

  • 谁能给点建议?至少告诉我另一个可以提问并得到答案的地方。谢谢。

标签: java active-directory ldap jndi


【解决方案1】:

如果用户无法登录,则无法更改自己的密码。如果他的密码已过期,您必须以管理员身份重置它,然后然后使用该密码登录并强制他立即更改。

【讨论】:

  • 谢谢EJP的回答,但是用户密码没有过期。正是在这种情况下“并迫使他立即改变它”。用户无法登录,因为他必须更改密码,但同时他也无法更改密码,因为他无法登录。我在论坛上写信给微软,他们的一位代表告诉我这是协议的限制我正在使用 - 可能是他没有说协议,因为协议是 LDAP,但他建议我更改它。
【解决方案2】:

@瓦伦丁·梅泽夫: 使用帐号 Admin getLdapContext,使用此上下文更改另一个帐号的密码。

例子:

LdapContext context = getLdapContext(url, dn_admin, pass_admin);
context.modifyAttributes(dn_change, modificationItems);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2011-03-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多