фильтр активного каталога с objectGUID, закодированным, как указано в rfc2254, не работает

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

это руководство в его шестнадцатеричном представлении:

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

spring 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, но я не уверен, что это правильно, и я предпочитаю, чтобы Spring кодировал фильтры, потому что он знает много вещей, которые я должен делать вручную.


person Shalom938    schedule 18.02.2013    source источник


Ответы (3)


Я думаю, что запись в блоге по адресу: https://web.archive.org/web/20180226001713/http://www.developerscrappad.com/1109/windows/active-directory/java-ldap-jndi-2-способа-декодирования-и-использования-объектного-руководства-из-Windows-Active-Directory/ предоставляет необходимую информацию.

person jwilleke    schedule 19.02.2013
comment
Спасибо. Я уже обнаружил это вчера, и я привязываюсь к группам, используя строку привязки, а не строку байтов, и это работает отлично. - person Shalom938; 19.02.2013

я нашел решение с php, чтобы получить пользователя с objectGUID etap one, когда я создаю пользователя, я помещаю его objectGuid в bdd, objectGuid, который вы видите в Ad ex $guid_str = "31207E1C-D81C-4401-8356-33FEF9C8A" после того, как я создаю свой собственная функция для преобразования этого идентификатора объекта в шестнадцатеричное число

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, я использую эту функцию, которую нашел в Интернете.

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

person ZeroCool    schedule 28.07.2016
comment
я рад, что это поможет вам :) - person ZeroCool; 09.03.2017

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

person Michael-O    schedule 18.02.2013