我有一个ASP.NET MVC Intranet站点,它使用Windows身份验证(Kerberos)专门用于传递身份验证。它设置为使用使用网络服务标识的应用程序池(v4 /集成)。该网站在另一台计算机(SAMBA NAS盒)上托管的网络共享之上提供了一个漂亮的UI。偶尔(通常当有人暂时没有访问该站点时),客户端在MVC代码尝试获取远程UNC共享上的目录信息(System.IO.Directory.GetLastWriteTime)时获得401授权错误。 IIS计算机上的事件日志会在同一时间点捕获安全审核失败:
+ System - Provider [ Name] Microsoft-Windows-Security-Auditing [ Guid] {54849625-5478-4994-a5ba-3e3b0328c30d} EventID 4625 Version 0 Level 0 Task 12544 Opcode 0 Keywords 0x8010000000000000 - TimeCreated [ SystemTime] 2012-03-17T00:43:50.522Z EventRecordID 398873 Correlation - Execution [ ProcessID] 696 [ ThreadID] 792 Channel Security Computer lvtloweb1.acme.com Security - EventData SubjectUserSid S-1-0-0 SubjectUserName - SubjectDomainName - SubjectLogonId 0x0 TargetUserSid S-1-0-0 TargetUserName TargetDomainName Status 0xc000006d FailureReason %%2304 SubStatus 0xc0000133 LogonType 3 LogonProcessName Kerberos AuthenticationPackageName Kerberos WorkstationName - TransmittedServices - LmPackageName - KeyLength 0 ProcessId 0x0 ProcessName - IpAddress - IpPort -
奇怪的是,如果你一遍又一遍地坐下来刷新页面,它通常会在大约一分钟内超过401错误。有人对如何排除这样的问题有什么想法吗?哦,是的,IIS机器托管在VM中。来宾操作系统是Windows Server 2008 Enterprise 6.0.6002 Service Pack 2.
答案 0 :(得分:3)
基思,
由于它似乎在用户空闲后发生的最多,我倾向于某种可能使服务器凭据无效的事件(即会话超时)。我假设有一台服务器,因为你没有提到任何网络农场。
我的一部分人认为您可能已经敲定了会话超时角度。除非您感到安全,否则用户将“自动进行身份验证”并在中途运行时超时不会导致其失败。那就是说,我不确定我是否完全相信这种情况。为了至少消除这种可能性,我将添加一个例程,在该操作开始之前记录有关当前会话/凭证的信息。即使用户“总是登录”,假设他们在他们的计算机上,我也看到了VPN,代理服务器,服务器双跃点,“可信区域”和“内部网”设置的IE配置等奇怪问题。即使计算机突然改变其服务器的路径也可能导致问题。我不确定VM上的网络仿真会起作用,但谁知道呢。
这是一篇关于IE的“入门”文章,它是一种复杂的身份验证方法,以及它作为访问Intranet MVC应用程序的客户端应用程序所扮演的角色。 (深入了解IE在Windows AD环境中如何自动进行身份验证是值得的。)
http://support.microsoft.com/kb/258063/en-us
这是由于双跳导致401s而导致的相关问题。我还在调查这些类型的问题时添加了另一个好的“首页”的链接。
http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx
对不起,如果您已经知道的任何事情或我的回复的一般性质。如果没有网络访问权限或者能够在代码中添加日志记录,那就很难了。我希望我已经指出了你正确的方向。