3

Я использую java ldap для доступа к активному каталогу, а точнее к весне ldap. групповой поиск по объектуGUID не дает результатов, когда фильтр закодирован, как указано в rfc2254.фильтр активных каталогов с объектнымGUID, закодированным, как указано в rfc2254, не работает

это является 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 и в майкрософт technet:

символ должен быть закодирован как символ обратной косой черты (ASCII 0x5c), за которым следуют две шестнадцатеричные цифры, представляющие значение ASCII кодированного символа. Случай двух шестнадцатеричных цифр не имеет значения. Blockquote

поэтому обратный слэш должен быть «\ 5с»

, но я не получаю результатов с выше фильтром из AD. также, если я поместил этот фильтр в пользовательские фильтры консоли управления AD, это не сработает. , когда я удаляю 5c из фильтра, он работает как из java, так и в консоли AD.

Я что-то упустил?

Конечно, я могу кодировать фильтр без 5c, но я уверен, что это правильный путь, и я предпочитаю, чтобы пружина закодировала фильтры, потому что он знает много вещей, которые я должен делать вручную.

ответ

2

Я думаю, что запись в блоге по адресу: http://www.developerscrappad.com/1109/windows/active-directory/java-ldap-jndi-2-ways-of-decoding-and-using-the-objectguid-from-windows-active-directory/ предоставляет необходимую информацию.

+0

Спасибо. Я уже нашел это вчера, и я привязываюсь к группам, используя строку привязки, а не строку байтов, она отлично работает. – Shalom938

0

Передайте массив байтов и поиск должен работать.

1

я нашел решение с PHP, чтобы получить пользователь ObjectGUID ЭТАП один, когда я создать пользователь я положил его ObjectGUID в BDD, в ObjectGUID, что вы видите в объявлении бывшего $ guid_str = «31207E1C-D81C-4401-8356-33FEF9C8A " после того, как я создать свою собственную функцию, чтобы преобразовать этот идентификатор объекта 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

+0

Я рад, что это поможет вам :) –

 Смежные вопросы

  • Нет связанных вопросов^_^