asp.net应用程序在本地主机上识别用户,但在服务器上没有硬编码用户名/密码

时间:2013-07-02 21:11:38

标签: c# asp.net-mvc iis-8 windows-server-2012

我在IIS8上建立了一个新的asp.net站点(Windows Server 2012)。我正在尝试使用适用于Windows Server 2008,IIS6的旧代码。两者都是虚拟服务器。

启用Windows身份验证。

禁用匿名身份验证。 (尝试启用我读过的一些帖子但没有变化)

通过以下方式获取用户:

string user = System.Web.HttpContext.Current.User.Identity.Name;

int separatorIndex = user.LastIndexOf(@"\");
if (separatorIndex != -1 && separatorIndex < user.Length - 1)
  {
    user = user.Substring(separatorIndex + 1);
  }

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://na.xxxxxx.biz");

DirectorySearcher directorySearcher = new DirectorySearcher(rootEntry);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", user);
directorySearcher.PropertiesToLoad.Add("displayName");

var result = directorySearcher.FindOne();

这在localhost上运行良好,在服务器上返回错误:

  

System.DirectoryServices.DirectoryServicesCOMException(0x80072020):发生操作错误。在System.DirectoryServices.DirectoryEntry.Bind上的System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)中的System.DirectoryServices.DirectoryEntry.Bind(),System.DirectoryServices.DirectoryEntry.get_AdsObject()位于System.DirectoryServices.DindorySearcher的System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne) .FindOne()位于e:\ inetpub \ wwwroot \ App_Code \ UserFullName.cs:第45行的EngApps.App_Code.UserFullName.LookUpDirectory()中

第45行是我使用'FindOne()'

在上面提出的最后一行

如果我硬编码我的用户名和密码,一切都在服务器上运行:

rootEntry.Username = user;
rootEntry.Password = "xxxxxx";

但我在旧的代码库中不需要这个,所以我猜测IIS8中有一个设置。我玩了一些匿名身份验证并阅读了几篇文章,但还没有弄明白。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

问题可能是您运行的应用程序的IIS应用程序池的身份是无法查询域的权限,例如LocalService。

您应该检查上一个实例上的App Pool,并确保身份相同或至少具有类似的访问权限。