【问题标题】:Escaping non special characters in string for LDAP query转义字符串中的非特殊字符以进行 LDAP 查询
【发布时间】:2012-09-23 06:56:10
【问题描述】:

我希望我已经恰当地命名了这个问题。这里有点混合主题。

我在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# 忽略字符串中的逗号?有效地逃脱它。

【问题讨论】:

    标签: c# string escaping ldap


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 2016-04-22
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 2011-10-08
        • 2011-05-11
        • 2011-05-07
        相关资源
        最近更新 更多