Active directory 对象GUID编码为rfc2254中指定的active directory筛选器不';行不通

Active directory 对象GUID编码为rfc2254中指定的active directory筛选器不';行不通,active-directory,ldap,jndi,spring-ldap,active-directory-group,Active Directory,Ldap,Jndi,Spring Ldap,Active Directory Group,我使用JavaLDAP访问active directory,更具体地说是SpringLDAP。 当按照rfc2254中的指定对筛选器进行编码时,按objectGUID进行的组搜索不会产生任何结果 这是十六进制表示形式的guid: \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

我使用JavaLDAP访问active directory,更具体地说是SpringLDAP。 当按照rfc2254中的指定对筛选器进行编码时,按objectGUID进行的组搜索不会产生任何结果

这是十六进制表示形式的guid:

\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))
如microsoft中所述:

该字符必须编码为反斜杠“\”字符(ASCII 0x5c),后跟表示ASCII的两个十六进制数字 编码字符的值。两个十六进制的情况 数字不重要。 大宗报价

所以反斜杠应该是“\5c”

但我从广告上面的过滤器中并没有得到任何结果。同样,若我把那个过滤器放在广告管理控制台的自定义过滤器中,它也不会工作。 当我从过滤器中移除5c时,它可以从java和AD控制台中工作

我是不是遗漏了什么


当然,我可以不用5c对过滤器进行编码,但我不确定它是否正确,我更喜欢让spring对过滤器进行编码,因为它知道很多我应该手动完成的事情。

传递一个字节数组,搜索就可以了。

我认为:的博客条目提供了您需要的信息。

我找到了使用php的解决方案具有objectGUID的用户 etap one创建用户时,我将其objectGuid放入bdd中,即您在Ad ex$guid_str=“31207E1C-D81C-4401-8356-33FEF9C8A”中看到的objectGuid 在我创建自己的函数来转换这个对象id int hexadécimal之后

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;

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

谢谢。我昨天已经发现,我使用绑定字符串而不是字节字符串绑定到组,它工作得非常好。我很高兴这对您有所帮助:)
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']);
}