Porovnat staré heslo proti active directory pomocí LDAP Jaře

0

Otázka

Vytvořil jsem koncový bod pro aktualizaci hesla uživatele, který je uvnitř naše služby Active Directory pomocí serveru LDAP na Jaře. Nemám problém měnit to bez kontroly v případě, že předchozí heslo zápasy, ale musím nějak zkontrolovat, že předchozí heslo je stejné jako ten v současné době v aktivním adresáři.

Můj kód je dávat mi tato chybová právě teď:

LDAP: error code 19 - 0000216C: AtrErr: DSID-03190F1E, 
#1:\n\t0: 0000216C: DSID-03190F1E, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd)

Moje heslo aktualizovat kód je následující:

public void updateUserPassword(User user,String oldPassword, String newPassword) throws NameNotFoundException, UnsupportedEncodingException {
    Attribute oldattr = new BasicAttribute("unicodePwd", toUnicodeBytes(oldPassword);
    Attribute newattr = new BasicAttribute("unicodePwd", toUnicodeBytes(newPassword);
    ModificationItem olditem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, oldattr);
    ModificationItem newitem = new ModificationItem(DirContext.ADD_ATTRIBUTE, newattr);
    ldapTemplate.modifyAttributes(buildDn(user), new ModificationItem[] { olditem, newitem });
}

public static byte[] toUnicodeBytes(String password){
    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);
    }
    return pwdArray;
}

Následující kód funguje, ale chci ověřit, že předchozí heslo je správné, tak to nemůžu použít.

public void updateUserPassword(User user,String oldPassword, String newPassword) throws NameNotFoundException, UnsupportedEncodingException {
    Attribute attr = new BasicAttribute("unicodePwd",toUnicodeBytes(newPassword));
    ModificationItem item = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attr);
    ldapTemplate.modifyAttributes(buildDn(user), new ModificationItem[] { item });
}

Nějaké nápady, jak problém vyřešit? Díky předem.

active-directory java ldap spring
2021-11-23 22:42:56
1

Nejlepší odpověď

0

To nemusí být váš problém, protože vy říkáte resetování hesla funguje, ale je to stojí za zmínku:

Změnit nebo resetovat heslo, spojení musí být bezpečné. Podrobnosti zde.

Můžete to udělat tím, že připojení k portu 636, což je výchozí nastavení LDAPS port (LDAP přes SSL). To lze provést zadáním portu LDAP connection string, např. "LDAP://example.com:636". Některé LDAP knihovny mohou podporovat pomocí "LDAPS://example.com" k dosažení totéž.

Protože některé servery používají self-signed cert, který nechce být důvěryhodný ve výchozím nastavení. Takže můžete narazit na problémy s tím. Ale hledat "Java LDAPS" pro pomoc při práci, pokud budete potřebovat.

2021-11-29 16:51:31

Používám ldaps pro celý proces, takže si nemyslím, že to je problém.
Rusty23

mohl by to být heslo politiky?
Rusty23

@Rusty23 je To možné
Gabriel Luci

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................