我有一个 Intranet ASP.NET MVC3 Web 应用程序,它使用带有 .NET Framework 4 的 Windows 身份验证。我的所有代码都在对用户进行身份验证。我将 Windows 身份验证用于基线身份验证,然后将 Active Directory 用户链接到 SQL Server 2008 中表中的用户,以获得特定于我的应用程序的其他用户属性。所有这些工作正常。
在网站的某个部分,管理员可以选择 Active Directory 用户以添加到 SQL 用户表(见上文)并输入他们的网站特定属性(IsAdmin、ShoeSize 等)。在此屏幕上,我填充了一个下拉列表,用于从我创建的自定义对象中检索所有 Active Directory,该对象仅包含 Active Directory 用户的用户名和全名属性。这是此代码:
public IQueryable<ActiveDirectoryUser> ActiveDirectoryUsers
{
get
{
// get list of users in the Active Directory
DirectoryEntry dirEntry = new DirectoryEntry("WinNT://" + Environment.UserDomainName);
List<DirectoryEntry> activeDirectoryUsers = dirEntry.Children.Cast<DirectoryEntry>()
.Where(c => c.SchemaClassName == "User").ToList();
// populate a custom class I have to hold the active directory user's username and full name property values
return activeDirectoryUsers
.Where(u => !string.IsNullOrEmpty(u.Properties["FullName"].Value.ToString()))
.Select(u => new ActiveDirectoryUser()
{
NetworkId = String.Format(@"{0}\{1}", Environment.UserDomainName, u.Properties["Name"].Value),
FullName = u.Properties["FullName"].Value.ToString()
}).AsQueryable();
}
}
出于某种原因,当 Web 应用程序部署到 IIS 7 时,此代码不会返回任何结果。但是,当在 Visual Studio 中从 IIS Express 运行站点时,这可以完美运行。关于为什么会发生这种情况的任何想法?我一直在寻找 IIS 设置作为罪魁祸首,但没有发现任何有用的东西。我是否需要更改检索 Active Directory 用户的方式?谢谢!