簡體   English   中英

PHP LDAP 檢索非默認屬性/屬性“lockedOut”

[英]PHP LDAP retrieve non default attribute/property "lockedOut"

有沒有辦法使用 PHP LDAP 擴展來檢索默認不返回的 AD 屬性/屬性?

具體來說,我正在嘗試檢索lockedOut屬性。 當您使用ldap_get_attributes時,默認情況下不會檢索此屬性。 在 PowerShell 中,您必須指定屬性才能檢索它:

Get-AdUser -Identity foo -Properties LockedOut | Select LockedOut

但是嘗試以與 PHP LDAP 相同的方式指定屬性似乎不起作用。

$result = ldap_search($conn, $dn, "cn=foo", ["lockedOut"]);
if ($result === false) {
    // Handling error...
}
$count = ldap_count_entries($conn, $result);
if ($count !== 1) {
    // Handling error...
}
$entry = ldap_first_entry($conn, $result);

// This array does not contain the expected "lockedOut" attribute
$attr = ldap_get_attributes($conn, $entry);

// No array returned but false (error)
$value = ldap_get_values($conn, $entry, "lockedOut")

我覺得那些非默認屬性無法使用 PHP LDAP(屬性。= 屬性)檢索。

我不知道lockedOut屬性,但 PHP 手冊頁上的一位評論者設法獲取了一些其他非標准或操作屬性,例如使用以下方法創建和修改時間戳。 也許,您可以嘗試將lockedOut添加到該屬性列表並使用此方法取得一些成功?

   $conn = $ds;
   $attrs = array( 'creatorsname', 'createtimestamp', 'modifiersname',
         'structuralObjectClass', 'entryUUID',  'modifytimestamp',
         'subschemaSubentry', 'hasSubordinates', '+' );
   $search = @ldap_read( $conn, $dn, '(objectClass=*)', $attrs, 0, 0, 0, $deref );

正如手冊頁上的另一條評論所建議的那樣,您還可以嘗試遍歷所有條目,直到找到lockedOut ,這是另一種選擇:

$entry = ldap_first_entry($ds, $sr);
write_attr($entry,$ds);
for ($i = 0; $i < $n_entries; $i++){
   $entry = ldap_next_entry($ds, $entry);
   write_attr($entry,$ds);
}

編輯

如前所述,另請參閱此答案

如果您只想知道用戶是否被鎖定,您可以改為獲取lockoutTime並檢查其值。 零或未設置的值表示用戶未被鎖定。

有一個默認屬性可以作為解決方法來完成這項工作: lockoutTime
它似乎是這樣工作的:

  • 帳戶從未鎖定: lockoutTime = <not set>
  • 帳戶過去被鎖定,但現在已解鎖: lockoutTime = 0
  • 帳戶鎖定: lockoutTime = 1+
    (= MS 文件時間;自 1601-01-01 UTC 以來的 100 納秒量)

解決方法代碼:

$result = ldap_search($conn, $dn, "cn=foo", ["lockoutTime"]);
if ($result === false) {
    // Handling error...
}
$count = ldap_count_entries($conn, $result);
if ($count !== 1) {
    // Handling error...
}
$entry = ldap_first_entry($conn, $result);
$attr = ldap_get_attributes($conn, $entry);

$rawLockoutTime = $attr["lockouttime"] ?? null;
$isLockedOut = $rawLockoutTime !== null && $rawLockoutTime[0] !== "0";

在 Python LDAP 的帖子上有關於它的參考

暫無
暫無

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

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