使用C#从Active Directory获取组织单位

3
我希望能够在正在构建的ASP.NET Web Forms网站上区分两种不同类型的用户。
所有用户都在我的AD中,我通过将它们放入两个不同的组织单位(OU)来区分这两个用户类型,这些OU分别称为:LRDBIPPDB
当我尝试使用此LDAP路径验证登录时:
<add name="ADConnectionString" connectionString="LDAP://test.example.com:389/DC=test,DC=com,OU=IPPDB" />

我收到了一个服务器错误,错误信息如下:
描述:在处理所需配置文件的过程中发生了错误。请查看以下具体错误详情并相应地修改您的配置文件。
解析器错误消息:发生操作错误。
我的 Membership Provider 所在行被标记为出错的位置。
<add enableSearchMethods="true" connectionStringName="ADConnectionString" name="MembershipADProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

然而,当我更改我的LDAP路径以排除OU部分时,它“起作用了”。所谓的起作用是指在AD中的任何人都可以得到验证,而不仅仅是组织单位中的成员。
如果我无法避免这整个混乱,我想也许我可以允许LDAP路径没有OU,然后一旦它确定用户是AD的一部分,它再检查它属于哪个OU。但是,我没有看到OU的属性。这就是我希望代码看起来像的样子。有办法从用户那里获取OU吗?
感谢您的帮助!
-----------------解决方案------------------
感谢marc_s:
我认为应该是

connectionString="LDAP://test.example.com:389/OU=IPPDB,DC=test,DC=com"  

OU=要先于DC=部分。


2
我认为应该是 connectionString="LDAP://test.example.com:389/OU=IPPDB,DC=test,DC=com" - OU 部分要 先于 DC= 部分。 - marc_s
是的! 似乎已经完成了!非常感谢!!! - Hebron George
LDAP地址总是从底层向上构建 - 例如从层次结构的最低级别到顶部(DC =部分是您域的顶级)。 - marc_s
我知道了。我会从现在开始注意的,谢谢! - Hebron George
1个回答

1
  • ou=ippdb,dc=test,dc=com 是一个区别名称
  • 区别名称由一系列相对区别名称(RDN)构成,用逗号(,)分隔。
  • 相对区别名称由属性值断言构成,其中断言的左侧是没有选项的属性描述(这意味着cn;lang-en=Bart Simpson 不是有效的相对区别名称,但 cn=Bart Simpson 是有效的),右侧是根据属性描述的语法构造的属性。
  • 作为左侧的属性描述必须具有等式匹配规则
  • 在相对区别名称中,左侧(属性描述)通常称为命名属性

区别名称的构造方式是使直接上级 RDN 位于其直接下级 RDN 的右侧(用逗号分隔)。在给定的示例中(假设dc=test,dc=com是目录信息树中的上级),那么ou=ippdb将立即从属于dc=test


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接