簡體   English   中英

PHP-LDAP無需使用管理員帳戶即可在Active Directory中更改用戶密碼

[英]PHP - LDAP change user passwords in Active Directory without using administrator account

我正在構建使用LDAP針對MS Active Directory進行身份驗證的應用程序。 我們有一個密碼政策,其中用戶密碼會過期。

如何通過PHP中的ldap在不使用AD管理員的情況下設置用戶密碼?

我見過很多方法,但所有方法都使用管理員帳戶,從我的角度來看,這是一種安全風險。

unicodePwd屬性文檔描述了兩種更改密碼的方法:

  1. 在同一LDAP請求中發送“刪除”和“添加”操作。 這使用舊密碼作為更改密碼的授權。 如果用戶在Windows中執行Ctrl + Alt + Del->更改密碼,這通常就是他們自己做的事情。
  2. 發送“替換”操作,與管理員重置密碼相同。 這要求您已經使用有權重置密碼的帳戶進行了身份驗證。

如果我對您的理解正確,那么您將避免使用選項2。因此,訣竅將是在同一請求中發送“添加”和“刪除”請求。 為此,您可以使用ldap_modify_batch 實際上,在文檔頁面本身上有一個示例

<?php
function adifyPw($pw)
{
    return iconv("UTF-8", "UTF-16LE", '"' . $pw . '"');
}

$dn = "cn=Jack Smith-Jones,ou=Wizards,dc=ad,dc=example,dc=com";
$modifs = [
    [
        "attrib"  => "unicodePwd",
        "modtype" => LDAP_MODIFY_BATCH_REMOVE,
        "values"  => [adifyPw("Tr0ub4dor&3")],
    ],
    [
        "attrib"  => "unicodePwd",
        "modtype" => LDAP_MODIFY_BATCH_ADD,
        "values"  => [adifyPw("correct horse battery staple")],
    ],
];
ldap_modify_batch($connection, $dn, $modifs);

請注意,您可能必須通過安全連接(LDAPS,通常在端口636上)進行連接,AD才能允許此操作。

暫無
暫無

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

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