转义LDAP查询的字符串中的非特殊字符

时间:2012-09-23 06:56:10

标签: c# string escaping ldap

我希望我能恰当地提出这个问题。这里有一个混合主题。

我在C#创建了一个创建Active Directory用户的功能。使用需要如下所示的LDAP字符串:

userinfo.displayName = "Surname, Firstname"

CN=" + userinfo.displayName, "user"

由于逗号位于字符串中,因此传回以下异常消息。

  

指定了无效的dn语法。

应用字符串后的完整dn如下

"CN=Surname**,** Lastname,OU=Users,DC="Foo",DC="net"

通用名CN =中的逗号是问题......

有没有一种方法C#可以忽略字符串中的逗号?有效地逃避它。

2 个答案:

答案 0 :(得分:9)

使用前导斜杠('\')转义可分辨名称中的无效字符。例如,上面的专有名称应为:

"CN=Surname\, Lastname,OU=Users,DC=Foo,DC=net"

根据RFC 4514: Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names第2.4节,字符"#+,,{{1} },;<=>可以通过前导斜杠进行转义。其他非字母数字字符应以\的形式显示,其中XX是UTF8字符编码的十六进制数字。有关示例,请参阅第4节。

请注意X500DistinguishedName类(在System.Security Cryptography中)似乎没有Parse或Escape方法来帮助解决这种情况。

答案 1 :(得分:5)

某些字符必须使用反斜杠(\后跟两个十六进制数字进行转义,而不是根据RFC4514进行单反斜杠转义。许多目录目录服务器支持\,,但由于它没有标准化,LDAP客户端不能使用这种表示法 - 它可以在某些服务器上运行但在其他服务器上不起作用,客户端不能假设它们正在与特定服务器的软件通信