簡體   English   中英

使用 LDAP Spring 將舊密碼與活動目錄進行比較

[英]Compare old password against an active directory using LDAP Spring

我創建了一個端點來使用 LDAP Spring 更新我們的 Active Directory 中的用戶的密碼。 在不檢查以前的密碼是否匹配的情況下更改它沒有問題,但是我需要以某種方式檢查以前的密碼是否與當前在活動目錄中的密碼相同。

我的代碼現在給了我這個錯誤:

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

我的密碼更新代碼如下:

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;
}

下面的代碼有效,但是我想驗證之前的密碼是否正確,所以不能使用。

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 });
}

關於如何解決問題的任何想法? 提前致謝。

這可能不是您的問題,因為您說重置密碼有效,但值得一提:

要更改或重置密碼,連接必須是安全的。 詳情在這里

您可以通過連接到端口 636 來執行此操作,這是默認的 LDAPS 端口(LDAP over SSL)。 這可以通過在 LDAP 連接字符串中指定端口來完成,例如"LDAP://example.com:636" 一些 LDAP 庫可能支持使用"LDAPS://example.com"來實現相同的目的。

由於某些服務器使用自簽名證書,默認情況下不會被信任。 所以你可能會遇到問題。 但是,如果需要,請搜索“Java LDAPS”以獲得幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM