ASP.NET MVC间歇性401授权错误

时间:2012-03-17 01:21:38

标签: asp.net iis kerberos

我有一个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.

1 个答案:

答案 0 :(得分:3)

基思,

由于它似乎在用户空闲后发生的最多,我倾向于某种可能使服务器凭据无效的事件(即会话超时)。我假设有一台服务器,因为你没有提到任何网络农场。

我的一部分人认为您可能已经敲定了会话超时角度。除非您感到安全,否则用户将“自动进行身份验证”并在中途运行时超时不会导致其失败。那就是说,我不确定我是否完全相信这种情况。为了至少消除这种可能性,我将添加一个例程,在该操作开始之前记录有关当前会话/凭证的信息。即使用户“总是登录”,假设他们在他们的计算机上,我也看到了VPN,代理服务器,服务器双跃点,“可信区域”和“内部网”设置的IE配置等奇怪问题。即使计算机突然改变其服务器的路径也可能导致问题。我不确定VM上的网络仿真会起作用,但谁知道呢。

这是一篇关于IE的“入门”文章,它是一种复杂的身份验证方法,以及它作为访问Intranet MVC应用程序的客户端应用程序所扮演的角色。 (深入了解IE在Windows AD环境中如何自动进行身份验证是值得的。)

http://support.microsoft.com/kb/258063/en-us

这是由于双跳导致401s而导致的相关问题。我还在调查这些类型的问题时添加了另一个好的“首页”的链接。

http://social.msdn.microsoft.com/Forums/en/sqlreportingservices/thread/6d1604e5-e739-41e4-89a5-c6681bff2e61

http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx

对不起,如果您已经知道的任何事情或我的回复的一般性质。如果没有网络访问权限或者能够在代码中添加日志记录,那就很难了。我希望我已经指出了你正确的方向。