3

私はjavaldapを使用してActiveDirectory、より具体的にはSpringldapにアクセスしています。フィルタがrfc2254で指定されているようにエンコードされている場合、objectGUIDによるグループ検索では結果が得られません。

これは、16進表現の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))

rfc2254およびmicrosofttechnetで言及されているよう

文字は、バックスラッシュ''文字(ASCII 0x5c)の後に、エンコードされた文字のASCII値を表す2桁の16進数としてエンコードする必要があります。2桁の16進数の場合は重要ではありません。ブロッククォート

したがって、円記号は'\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

ユーザーを作成するときにobjectGUIDetapを使用してユーザーを取得するためのphpのソリューションを見つけました。彼のobjectGuidをbddに配置します。このオブジェクトIDを16進数で変換する独自の関数

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 に答える