繁体   English   中英

IIS / DirectoryEntry / ASP.NET-登录失败

[英]IIS / DirectoryEntry / ASP.NET - Logon Failure

更新

把它放在顶部,因为它很疯狂:)

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

我还从IE7中清除了所有cookie,然后重新启动,并且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设置或其他设置,但是代码没有更改。

我知道我需要预先模拟才能使其正常工作,而且看来我应该模拟,所以我很犹豫在不完全了解正在发生的情况以及为什么现在会发生此错误的情况下删除模拟调用。

谢谢。

我怀疑问题在于托管ASP.NET应用程序的服务器不受信任。 Google提供“受信任的授权”以获取更多信息,或者这篇MSDN文章是一个很好的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM