【问题标题】:ASP.NET IIS Authentication issue for some users某些用户的 ASP.NET IIS 身份验证问题
【发布时间】:2023-03-15 19:51:02
【问题描述】:

我有一个在 IIS6.0 上运行的 ASP.NET 存储库站点,我遇到了一个无法重现的问题,但其中三个用户每次都遇到这个问题(大约 20 个其他用户运行良好)。我很确定这与 IIS 身份验证设置有关,但我当然没有排除编码错误。

用户告诉我,这 3 个出现错误的共同因素是他们已将 60 多个文档上传到网站上。所有用户都在不同的省份,所以我只有他们拍摄的屏幕截图和服务器事件日志可供调试。

当尝试访问 ViewPage.aspx 页面(但不是站点上的任何其他页面)时,系统会提示他们输入用户凭据。当他们尝试登录时,他们会再次收到登录提示。他们尝试登录 3 次后,收到以下错误消息:

HTTP 错误 401.1 - 未经授权:由于凭据无效,访问被拒绝。

系统事件查看器有以下警告(其中任一警告超过 10 个):

事件ID:1011
来源:W3SVC
说明:
为应用程序池“SDAAppPool”提供服务的进程与万维网发布服务发生了致命的通信错误。进程 ID 为“3264”。数据字段包含错误号。

事件ID:1009
来源:W3SVC
说明:
为应用程序池“SDAAppPool”提供服务的进程意外终止。进程 ID 为“2088”。进程退出代码为“0x800703e9”。

安全事件查看器有以下几个失败审计:

事件 ID:560
来源:安全
类别:对象访问
说明:
对象打开:
对象服务器:SC 管理器
对象类型:服务对象
对象名称:WinHttpAutoProxySvc
手柄 ID:-
操作 ID:{0,557880730}
进程 ID:444
镜像文件名:C:\WINDOWS\system32\services.exe
主要用户名:EBTOPVNET01$
主域:EBSS
主登录 ID:(0x0,0x3E7)
客户端用户名:网络服务
客户域:NT AUTHORITY
客户端登录 ID:(0x0,0x3E4)
访问:查询服务状态
启动服务
从服务中查询信息
特权:-
受限制的 Sid 计数:0
访问掩码:0x94

应用程序事件查看器有以下错误:

事件 ID:5000
来源:.NET 运行时 2.0 错误
用户:不适用
说明:
EventType clr20r3,P1 w3wp.exe,P2 6.0.3790.3959,P3 45d691cc,P4 system.data,P5 2.0.0.0,P6 4889ece0,P7 1849,P8 0,P9 system.stackoverflowexception,P10 NIL。

我的 web.config 具有以下身份验证/授权代码:

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

我在 ViewPage.aspx 页面上使用以下用户检查:

UsersService us = new UsersService();
TList<Users> currUser = us.Find("Ntid = '" + User.Identity.Name + "'");
int userID = 0;
if (currUser.Count != 0 )
{
    userID = currUser[0];
}

并使用该用户 ID 来检查访问等。如果 userID == 0 他们只获得读取权限(如果 User.Identity.Name 返回空,我认为这会给用户读取权限而不是 401 错误)。我在另一个页面上执行相同的用户检查,用户访问它没有问题。

根据我在谷歌上搜索各种子问题的几天,我不确定所有这些事实是否相关,但我已经包含了我能想到的所有内容。如果我错过了任何相关的内容,请告诉我。任何关于从哪里开始调查或能够在我的本地主机上重现它以便我可以调试的方法的想法将不胜感激。谢谢。

【问题讨论】:

  • UsersService() 是什么,它在做什么?
  • UsersService 是 NetTiers 生成的 DAL 类。该方法从数据库返回具有该 NTID 的用户的 TList。 (将有 0 或 1 个具有该 NTID 的用户)

标签: asp.net iis http-status-code-401


【解决方案1】:

从进程退出代码看来,某种递归正在发生并且从未展开。很棒的 Tess Ferrandez 有一篇很棒的文章解释了如何调试这样的问题:

A .NET Crash: How not to write a global exception handler

【讨论】:

  • 我正在研究递归方法,我必须看看那里是否有任何东西。但这不会给我一个 ASP.NET 服务器错误而不是 401.1
  • @Richard - 这可能是工作进程崩溃的副作用。我肯定会先解决崩溃问题,这非常严重,会影响网站的所有用户。您还应该了解正在使用的浏览器、它们的 cookie 设置等。这些用户可能会以不同的方式处理表单身份验证票 cookie。但我在黑暗中刺伤那里。正如我所说,首先修复工作进程崩溃并从那里获取它。
  • 好吧,似乎有一个循环将用户有权访问的每个未经批准的上传文档添加到一个字符串中。循环不是无限的,但如果用户在这种状态下有足够多的文档,那么字符串似乎会变得足够大以溢出堆栈。一旦我们批准了这些文档,字符串就不会变得足够大而不会溢出堆栈,并且 401.1 错误不会再次发生。所以基本上我是在浪费时间研究那个错误(以及更改 ISS 权限等)。感谢您为我指明正确的方向。
  • @richard - 非常好。如果您认为这有帮助,您能否将其标记为正确答案和/或投票?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多