我有一个 IIS 服务器,它是不在域内的独立服务器。
因此用户不必登录到本地用户数据库,我是否可以使用 IIS 服务器,根据域控制器对用户进行身份验证,或者至少将用户的登录名传递到 IIS 应用程序?
可以假设用户会信任该网站。
答案1
当我尝试弄清楚如何利用 Active Directory 实现 BlogEngine.NET 时,我遇到了类似的需求。经过一段时间的研究,我能够将 Active Directory 用户帐户与基本身份验证 .NET 成员资格框架结合使用。
这在我的域成员 Web 服务器上有效,但可以轻松地在非域成员服务器上工作,前提是您将用户名和密码添加到 web.config 的配置部分。
从我的博客文章关于如何配置:
在指向您的域控制器的部分中添加一个条目。
<add name="ADConnectionString" connectionString="LDAP://server.domain.com/DC=domain,DC=com" />
请注意,LDAP:// 语法的第一部分指定了域控制器的名称 (server.domain.com)。这里有几个选项。您可以指定完全限定域名 (如示例所示);您可以指定relativeDistinguishedNamek (例如 server);您可以指定域控制器的 IP 地址 (例如 192.168.1.10);或者为了获得更多冗余,您可以仅指定域名 (例如 domain.com)。
使您的部分看起来如下所示:
<membership defaultProvider="MyADMembershipProvider">
<providers>
<add name="MyADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
attributeMapUsername="sAMAccountName"
enableSearchMethods="true"/>
</providers>
</membership>
您会注意到,我没有配置用于连接到 Active Directory 的用户名和密码。这是因为我在域成员服务器上运行 BlogEngine,并且 IIS 服务在使用网络服务帐户的应用程序池下运行。如果您必须使用显式凭据,那么您可以将 connectionUsername 和 connectionPassword 添加到 MyADMembershipProvider 条目中,并提供相应的信息。
答案2
如果可能的话,我建议使用 LDAPS 调用而不是 LDAP。如果您要开始以纯文本形式传递域密码,我还建议使用 SSL。
答案3
虽然我同意加密 LDAP,但同时也加密了配置文件中的域密码......(钥匙在垫子下面,还是在花盆后面?)