5

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

我创建了一个函数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# 忽略字符串中的逗号?有效地逃避它。

4

2 回答 2

11

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

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

根据RFC 4514 的第 2.4 节:轻量级目录访问协议 (LDAP):可分辨名称的字符串表示,字符, ", #, +, ,, ;, <, =,>\可以通过前导斜杠进行转义。其他非字母数字字符应以\XXXX 为 UTF8 字符编码的十六进制数字的形式显示。有关示例,请参见第 4 节。

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

于 2012-09-23T07:39:14.727 回答
6

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

于 2012-09-23T10:50:27.367 回答