3

我正在使用 java ldap 访问活动目录,更具体地说是 spring ldap。当过滤器按照 rfc2254 中的指定进行编码时,按 objectGUID 进行的组搜索不会产生任何结果。

这是其十六进制表示形式的指南:

\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 对过滤器进行编码,因为它知道很多我应该手动完成的事情。

4

3 回答 3

3

我认为博客条目位于: http: //www.developerscrappad.com/1109/windows/active-directory/java-ldap-jndi-2-ways-of-decoding-and-using-the-objectguid-from-windows -active-directory/提供您需要的信息。

于 2013-02-19T11:44:52.397 回答
1

当我创建用户时,我找到了使用 php 获取具有 objectGUID etap 的用户的解决方案,我将他的 objectGuid 放在 bdd 中,您在广告 ex $guid_str = "31207E1C-D81C-4401-8356-33FEF9C8A"自己的函数来转换这个对象 id int hexadecimal

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

于 2016-07-28T13:10:30.930 回答
0

传递一个字节数组,搜索应该可以工作。

于 2013-02-18T12:51:00.937 回答