2009-06-29 77 views
2

更新IIS /的DirectoryEntry/ASP.NET - 登录失败

顶部把这个,因为它是疯狂的:)

因此一些用户就可以工作,有些则没有。当我通过IE7使用自己的帐户时,它不起作用(我的代码捕获异常并退回到仅使用身份名称而不是AD全名)。当我通过Chrome尝试时,它会提示我输入用户名和密码,并显示完整名称。因此,用户帐户,服务器代码和设置是相同的,但使用不同的浏览器发送认证正在使其工作。

我也清除了IE7中的所有cookies,重新启动,并且IE的行为没有变化。大量的IE7用户都能正常工作。

更新#2

远程登录到不同的机器,去了网页在IE7,它显示我的全名。没有线索。我想可能会议正在缓存某些内容,但我已重新发布应用程序,并且应该清除会话。我在想也许一个cookie有一个老的/坏的标记,但我已经清除了这些并再次尝试。某处必须获得长期缓存。希望它能够解决问题。

结束更新

你好,

我从我们在IIS 6.0上运行的ASP.NET(MVC)应用AD检索用户的全名。

string domainUser = filterContext.HttpContext.User.Identity.Name; 

WindowsIdentity windowsIdentity = filterContext.HttpContext.User.Identity as WindowsIdentity; 

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

DirectoryEntry userEntry = new DirectoryEntry("WinNT://" + domainUser.Replace('\\', '/') + ",User"); 
filterContext.Controller.ViewData["User"] = (string)userEntry.Properties["fullname"].Value; 

最后一行引发异常:“登录失败:未知用户名或密码错误。”

如果我看一下HttpContext.User.Identity,它是一个有效的域用户,并且WindowsIdentity.GetCurrent正在被正确模拟。

这个异常似乎还没有被100%的时间抛出,如果从IIS服务器浏览它不会被抛出。

我的web.config看起来像:

<authentication mode="Windows"/> 
<authorization> 
    <deny users="?"/> 
</authorization> 
<identity impersonate="false"/> 

什么是窃听我的是,如果我删除了模拟线:

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

它的工作原理。 WindowsIdentity.GetCurrent是NT AUTHORITY \ NETWORK SERVICE,它不是域用户,但不会引发异常,并且从AD中检索完整名称。

最后一点是,这似乎只是开始发生应用程序的新部署(从测试到现场)。我不知道我是否缺少IIS设置或什么,但代码没有改变。

我知道我以前需要模仿以使其工作,并且好像我需要模仿,所以我很犹豫是否在不完全知道发生了什么以及为何发生此错误的情况下删除模拟呼叫正在发生。

谢谢。

回答

1

我怀疑问题是托管ASP.NET应用程序的服务器不受信任委派。谷歌对于“值得信赖的代表团”获取更多信息,或者this MSDN article是一个很好的起点。

+0

经过多次测试后,虽然我不确定问题出在哪里,但我不认为它可以100%作为服务器。我添加了更新,但基本上它适用于相同的帐户,相同的服务器,相同的客户机,不同的浏览器(一个浏览器失败,一个正常)。我很难过。我确实尝试了这个建议,并将服务器设置为可信任的委派,但事情似乎没有解决(即传播时间可能比我等待的时间更长)。 – anonymous 2009-06-29 18:06:17