繁体   English   中英

如何在Ldap中将用户帐户控制属性固定为512

[英]How to fix the user account control attribute to 512 in Ldap

使用Java代码,我试图在AD LDAP中创建用户,但是我无法通过代码将userAccountControl状态设置为512,但我将userAccountControl状态设置为512,但是创建的用户具有不同的userAccountControl状态,即544。

创建用户后,我无法使用其ID(DN)和密码登录LDAP。

我正在使用代码:

attributes.add(new LDAPAttribute("userAccountControl", "512"));
attributes.add(new LDAPAttribute("userPassword", "Password@1"));

还有其他方法可以将userAccountControl设置为512吗?

userAccountControl值544为512 + 32,这意味着 NORMAL_ACCOUNT + PASSWD_NOTREQD ,可能是因为在创建密码时没有密码。 如果没有密码,则不能将其设置为512。

创建帐户后,必须在第二步中设置密码。 AD有点奇怪,因为userPassword属性有时甚至按照您想象的那样运行,甚至存在。 如果需要,可以在这里阅读。 但是您最好只设置unicodePwd ,它总是以相同的方式工作,尽管它有点奇怪。

有这样的Java示例在这里

public void updateUserPassword(String username, String password)
{
    try
    {
        System.out.println("updating password...\n");
        String quotedPassword = "\"" + password + "\"";
        char unicodePwd[] = quotedPassword.toCharArray();
        byte pwdArray[] = new byte[unicodePwd.length * 2];
        for (int i = 0; i < unicodePwd.length; i++)
        {
            pwdArray[i * 2 + 1] = (byte) (unicodePwd[i] >>> 8);
            pwdArray[i * 2 + 0] = (byte) (unicodePwd[i] & 0xff);
        }
        System.out.print("encoded password: ");
        for (int i = 0; i < pwdArray.length; i++)
        {
            System.out.print(pwdArray[i] + " ");
        }
        System.out.println();
        ModificationItem[] mods = new ModificationItem[1];
        mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("UnicodePwd", pwdArray));
        ldapContext.modifyAttributes("cn=" + username + BASE_NAME, mods);
    }
    catch (Exception e)
    {
        System.out.println("update password error: " + e);
    }
}

请注意,您必须使用LDAPS(LDAP over SSL,通常在端口636上)才能设置密码。

您可以在设置密码的同一请求中将userAccountControl设置为512。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM