asp.net应用程序在本地主机上识别用户,但在没有硬编码用户名/密码的情况下不能在服务器上识别用户
本文关键字:用户 识别 编码 密码 服务器 不能 情况下 应用程序 net 主机 asp | 更新日期: 2023-09-27 18:20:43
我正在IIS8(windows server 2012)上建立一个新的asp.net网站。我正在尝试使用在windows服务器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(布尔throwIfFaile: ''inetpub''wwwroot''App_Code''UserFullName.cs:line 45
第45行是我在上面使用"FindOne()"提出的最后一行
如果我硬编码我的用户名和密码,服务器上的一切都可以工作:
rootEntry.Username = user;
rootEntry.Password = "xxxxxx";
但我在旧的代码库中不需要这个,所以我猜IIS8中有一个设置。我玩了一些匿名身份验证,读了几篇帖子,但还没能弄清楚。
谢谢你的帮助。
问题可能是运行应用程序的IIS应用程序池的标识没有查询域的权限,例如LocalService。
您应该检查上一个实例上的应用程序池,并确保标识相同或至少具有类似的访问功能。