【问题标题】:Query an AD domain via SSL通过 SSL 查询 AD 域
【发布时间】:2010-10-22 18:04:48
【问题描述】:

我有一个域和端口号 (636) 以及用户名和密码。

我正在尝试找出一种通过安全 LDAP 连接到此 AD 并获取用户“givenname”、“sn”、“mail”以及可能还有一些自定义属性的方法。

但是我不知道如何在 C# 中执行此操作。

我认为 Microsoft 可能已经有一个可用的方法,但我将推迟到大家。

最终的用户体验将是:查看登录屏幕,输入用户名和密码,这些凭据通过 LDAP 发送,用户信息返回到我的网络应用程序,然后如果一切顺利,我会登录他们...我也不知道失败的尝试会是什么样子,所以我可以否认他们。有任何想法吗?

请附上代码示例,以便我理解实现,谢谢!

【问题讨论】:

  • 很明显,您甚至没有尝试自己寻找它(我知道,我甚至在一个月前就为此构建了一个类库)。请询问具体问题的答案,而不是完整的解决方案。
  • google 本身的第一个链接应该为您提供所需的所有信息c-sharpcorner.com/uploadfile/ankithakur/…
  • @Shogun,您在@InSane 发布的链接中发现了什么新内容吗?
  • @InSane 这看起来像使用 SQL 我不明白这与 LDAP 有什么关系,我真的很困惑......
  • @Shogun - 一定要通过GetADSILogin() 方法。在此方法中,示例仅使用 DB 表获取登录 AD 的参数。您可以很好地对它们进行硬编码或使用其他一些技术来存储这些值。它是如何使用System.DirectoryServicesDirectoryEntry 等的逻辑是你需要检查的。

标签: c# .net ssl active-directory ldap


【解决方案1】:

你试过google吗?

编辑

对于喧嚣和刻薄的回应感到抱歉。我认为您遇到的问题是您没有完全正确地提出问题 - 无论是在这里还是在谷歌上。无论如何,您不需要在这里阅读 C# 代码。您只需将您的 Web 应用程序配置为使用 AD 作为会员提供程序。您需要一个连接字符串 [正确处理是最难的部分]:

<connectionStrings>
    <add name="MyAd"
         connectionString="LDAP://adserver/OU=Users"
         />
</connectionStrings>

还有一个会员提供者:

<membership defaultProvider="AdProvider">
        <providers>
            <add 
                name="AdProvider"
                type="System.Web.Security.ActiveDirectoryMembershipProvider, 
                    System.Web, Version=2.0.0.0, 
                    Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
                connectionStringName="MyAd"
                applicationName="ItRemoteHelpdesk"
                enablePasswordReset="false"
                 />
        </providers>
    </membership>

然后用户可以使用他们正常的用户名@域和密码登录。

【讨论】:

  • @Shogun,认真的!!您只是要求我们为您构建解决方案,而不是回答问题。如果您只想回答一个问题,那么是的,这是可能的。
  • @Brad,我没有,我只是要求提供代码示例和有关使用什么 C# 库的信息......而询问 SO 的目的是帮助添加到网站并获得建议用户,例如人们可能遇到的一些陷阱,实时建议......哇,只是......哇......
  • @Shogun,你的问题太宽泛了。我编写了一个完整的 Dll 来自定义包装 .NET 的 AD 身份验证。适合发帖吗?可能不会。
  • 谢谢怀亚特,您知道是否可以在正常登录的同时进行此操作? Web 应用程序中的大多数帐户将使用我们数据库中的普通用户名/密码查找直接登录到 Web 应用程序,但一些特殊帐户将被标记为通过其 AD 登录。
  • 从未尝试过,但您在此处的注意事项与使用任何其他多成员资格提供程序应用程序相同。
【解决方案2】:

System.DirectoryServices.AccountManagement 是用于较新的非 LDAP AD 身份验证的 .NET dll。

试试这个网站的代码示例作为一个很好的起点:

http://www.codeproject.com/KB/system/usingAccountManagement.aspx

【讨论】:

  • 它必须是安全 LDAP。所以我猜“非 LDAP”没有使用安全 LDAP,对吧?
  • @Shogun,您可以在创建Context(DC 的链接)时使用ContextOptions 枚举来指定您想要SSL msdn.microsoft.com/en-us/library/…
  • 一切顺利,一切顺利。 :)
  • @Brad,关于提供的这个链接的另一个问题,这实际上是使用安全 LDAP 协议吗?我们的合作伙伴只允许来自我们这边的特定 IP 地址的此协议。
  • @Shogoun,我帮不了你。我的实现中不需要它。
【解决方案3】:

您绝对应该按照 Brad 的建议查看 .NET 3.5 System.DirectoryServices.AccountManagement 命名空间。

要获得如何使用它的良好开端,请阅读这篇 MSDN 杂志文章:Managing Directory Security Principals in the .NET Framework 3.5

这篇文章确实多次谈到如何安全地(使用 SSL)连接到您的 AD 域,以及如何例如创建用户或检索用户信息。我认为仔细阅读那篇文章并尝试代码示例应该会让您对如何做您正在寻找的事情有一个很好的了解。

更新:很明显,S.DS.AM 中的所有这些方法都要求您针对 AD 进行身份验证。新类还提供了非常简单的用户凭据验证(如我链接到的那篇文章所示):

// establish context 
PrincipalContext domain = new PrincipalContext(ContextType.Domain);

// determine whether a user can validate to the directory
bool validated = domain.ValidateCredentials("user1", "Password1");

【讨论】:

  • 我很困惑。我试图让 AD 用户使用他们的用户名和密码通过我的网络应用程序登录到客户端 AD。这看起来像我可以在没有密码的情况下查找任何用户......那么我如何验证某人?我如何获得访问权限,一些管理员密码?更多阅读我必须做...这看起来很...过于复杂!
  • @Shogun:当然,只有通过身份验证才能查找某人。阅读我链接到的那篇文章!它还向您展示了如何轻松地针对 AD 验证凭据,以及如何登录给定用户。当然,只有登录他才能做所有其他事情!
  • 哦...客户给了我一个测试用户但没有管理员帐户或类似的东西,我想我需要回去要求一个?或者我可以对普通用户进行身份验证吗?请澄清,我在这里很困惑..
  • @Shogun:这取决于 Active Directory 配置,但默认情况下,任何域用户至少可以从 AD(至少部分)
猜你喜欢
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多