3

我正在使用java ldap訪問活動目錄,更具體地說是spring ldap。 按照objectGUID進行的組搜索按照rfc2254中的指定編碼過濾​​器時不會生成結果。在rfc2254中指定objectGUID編碼的活動目錄過濾器不起作用

這中的GUID其十六進制表示:

\49\00\f2\58\1e\93\69\4b\ba\5f\8b\86\54\e9\d8\e9 

彈簧LDAP編碼這樣的過濾器:

(&(objectClass=group)(objectGUID=\5c49\5c00\5cf2\5c58\5c1e\5c93\5c69\5c4b\5cba\5c5f\5c8b\5c86\5c54\5ce9\5cd8\5ce9)) 

rfc2254和Microsoft technet提到:

該字符必須編碼爲反斜線「\」字符(ASCII 0x5c)後跟兩個十六進制數字,表示編碼字符的ASCII碼 值。兩個十六進制數字 的情況並不重要。 大段引用

這樣一個反斜槓應該是「\ 5C」

,但我得到與AD上述過濾器沒有結果。如果我把這個過濾器放在AD管理控制檯自定義過濾器中,它也不起作用。 當我從過濾器中刪除5c時,它可以從java和AD控制檯中使用。

我在這裏錯過了什麼嗎?

我當然可以編碼沒有5C過濾器,但我肯定新臺幣以正確的方式,我寧願讓春天編碼的過濾器,因爲它知道很多東西,我應該做手工。

回答

0

傳遞一個字節數組並且搜索應該可以工作。

1

我發現PHP的解決方案,使用戶用的objectGUID ETAP之一,當我創建的用戶,我把他的objectGUID在BDD,您在廣告前$ guid_str =「31207E1C-D81C-4401-8356-33FEF9C8A看到的objectGUID 「 後,我創建自己的函數來改變這個對象ID INT十六進制

function guidToHex($guid_str){ 

$str_g= explode('-',$guid_str); 

$str_g[0] = strrev($str_g[0]); 
$str_g[1] = strrev($str_g[1]); 
$str_g[2] = strrev($str_g[2]); 

$retour = '\\'; 
$strrev = 0; 
foreach($str_g as $str){ 
    for($i=0;$i < strlen($str)+2; $i++){ 
     if($strrev < 3) 
      $retour .= strrev(substr($str,0,2)).'\\' ; 
      else 
       $retour .= substr($str,0,2).'\\' ; 
       $str = substr($str,2); 

    } 
    if($strrev < 3) 
     $retour .= strrev($str); 
     else 
      $retour .= $str ; 


      $strrev++; 
} 
return $retour; 

}

這個函數返回我的字符串,就像\ 1C \ 7E \ 20 \ 31 \ 1C \ D8 \ 01 \ 44 \ 83 \ EF \ 9C \ 8A「\ F9 \ ED \ C2 \ 7F後,我把這個字符串放在我的過濾器中,我得到用戶

得到的objectGUID 的格式,我用這個fonction我foud它在互聯網

function convertBinToMSSQLGuid($binguid) 
{ 
    $unpacked = unpack('Va/v2b/n2c/Nd', $binguid); 
    return sprintf('%08X-%04X-%04X-%04X-%04X%08X', $unpacked['a'], $unpacked['b1'], $unpacked['b2'], $unpacked['c1'], $unpacked['c2'], $unpacked['d']); 
} 

我的意思是這種格式= 31207E1C-D81C-4401-8356-33FEF9C8A

+1

這對我非常有幫助,謝謝。 – Rich701 2017-03-08 18:20:13

+0

我很高興,這有助於你:) – 2017-03-09 18:44:50