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

标签 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 机器托管在虚拟机中。 guest 操作系统是 Windows Server 2008 Enterprise 6.0.6002 Service Pack 2。

最佳答案

基思,

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

我的一部分认为您可能已经敲定了 session 超时角度。除非您觉得安全,相信用户会“自动身份验证”,并且操作中超时不会导致其失败。也就是说,我不确定我是否完全相信情况确实如此。为了至少消除这种可能性,我将添加一个例程,在该操作开始之前记录有关当前 session /凭据的信息。即使用户“始终登录”(假设他们在自己的计算机上),我也看到过 VPN、代理服务器、服务器双跳、“受信任区域”的 IE 配置和“内联网”设置方面的奇怪问题。即使计算机突然更改到服务器的路由也可能会导致问题。我不确定虚拟机上的网络模拟是否会发挥作用,但谁知道呢。

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

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

这是某人因双跳导致 401 而遇到的相关问题。我还提供了另一个很好的“起始页”的链接,用于调查此类问题。

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

很抱歉,如果您已经知道上面的内容或我的回复的一般性质。如果没有实际的网络访问权限或无法向代码添加日志记录,这会很困难。我希望我已经为您指明了正确的方向。

关于ASP.NET MVC 间歇性 401 授权错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746443/

相关文章:

c# - 即使我立即获得返回任务的结果,HttpClient 是否会旋转一个新线程?

javascript - 获取 .js 文件中的 .aspx 控件 ID

sharepoint - 使用 Kerberos 通过 SSL 从 SharePoint 调用 Reporting Services Web 服务

c# - 如何在sql中将已删除的行插入到另一个表中

c# - 在 Javascript 中设置隐藏的输入值,然后在代码隐藏中访问它

asp.net - 如何让 IIS 7 将对 .css 文件的请求路由到 aspnet_isapi.dll?

iis - IIS 6 子文件夹中的不同默认文档类型

c# - 如何使用 ASP.NET 在负载平衡服务器上存储和检索上传的图像?

asp.net-mvc-3 - 在IIS上运行时,ASP.NET Web应用程序中的模拟不起作用

java - 为什么 JDK1.8.0u121 无法找到 kerberos default_tkt_enctypes 类型? (KrbException : no supported default etypes for default_tkt_enctypes)