【问题标题】:Get Organizational Unit from Active Directory using C#使用 C# 从 Active Directory 获取组织单位
【发布时间】:2012-08-08 15:21:12
【问题描述】:

我想在我正在构建的 ASP.NET Web 窗体站点上区分两种不同类型的用户。

所有用户都在我的 AD 中,我区分这两者的方法是将它们放在两个不同的组织单位中,分别称为: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 的属性。 Here's what I would want the code to look like.有没有办法从用户那里获取OU?

感谢您的帮助!

-----------------解决方案------------------

感谢 marc_s:

我认为应该是

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

OU= 位于DC= 部分之前

【问题讨论】:

  • 我认为应该是connectionString="LDAP://test.example.com:389/OU=IPPDB,DC=test,DC=com" - OU 首先 DC= 部分之前
  • 是的!这似乎已经做到了!非常感谢!!!!
  • LDAP 地址始终是“自下而上”构建的 - 例如从层次结构的最低层到最高层(DC= 部分是您域的顶层)。
  • 我明白了。从现在开始我会记住这一点,谢谢!

标签: .net active-directory ldap directoryservices


【解决方案1】:
  • ou=ippdb,dc=test,dc=com 是一个专有名称
  • 专有名称由一系列相对专有名称 (RDN) 构成,并以逗号 (,) 分隔。
  • 相对专有名称由属性值断言构成,其中断言的左侧是没有选项的属性描述(意味着cn;lang-en=Bart Simpson 不是有效的相对专有名称,但cn=Bart Simpson 是有效的),右侧-hand side 是根据属性描述的语法构造的属性。
  • 用作左侧的属性描述必须有一个equality matching rule
  • 在相对专有名称中,左侧(属性描述)通常称为naming attribute

构造可分辨名称使得直接上级 RDN 位于其直接下级 RDN 的右侧(以逗号分隔)。在给出的示例中(假设dc=test,dc=com 在目录信息树中的正常约定优先),ou=ippdb 将立即从属于dc=test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多