转义为LDAP查询的字符串中的非特殊字符
我希望我能恰当地提出这个问题。 这里有一个混合主题。
我在C#
中创建了一个创建Active Directory用户的函数。 使用需要如下所示的LDAP字符串:
userinfo.displayName = "Surname, Firstname" CN=" + userinfo.displayName, "user"
由于逗号位于字符串中,因此传回以下exception消息。
指定了无效的dn语法。
应用字符串后的完整dn如下所示
"CN=Surname**,** Lastname,OU=Users,DC="Foo",DC="net"
通用名CN =中的逗号是问题…
有没有一种方法C#可以忽略字符串中的逗号? 有效地逃避它。
使用前导斜杠(’\’)来转义可分辨名称中的无效字符。 例如,上面的专有名称应为:
"CN=Surname\, Lastname,OU=Users,DC=Foo,DC=net"
根据RFC 4514第2.4节:轻量级目录访问协议(LDAP):可分辨名称的字符串表示 ,字符 ,
"
, #
, +
<
, =
, >
和\
可以通过前导斜杠进行转义。其他非字母数字字符应以\XX
的forms显示,其中XX是UTF8的hex数字字符编码。有关示例,请参阅第4节。
请注意, X500DistinguishedName类(在System.Security Cryptography中)似乎没有Parse或Escape方法来帮助解决这种情况。
某些字符必须使用反斜杠( \
)进行转义, 后跟两个hex数字 ,而不是根据RFC4514的单个反斜杠。 许多目录目录服务器都支持\,
但由于它没有标准化,因此LDAP客户端不能使用这种表示法 – 它可以在某些服务器上运行,但不能在其他服务器上运行,客户端不能假设它们正在与特定服务器的软件通信。