某些用户的 ASP.NET IIS 身份验证问题

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

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

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

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

HTTP Error 401.1 - Unauthorized: Access is denied due to invalid credentials.

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

EventID:1011
Source: W3SVC
Description:
A process serving application pool 'SDAAppPool' suffered a fatal communication error with the World Wide Web Publishing Service. The process id was '3264'. The data field contains the error number.

EventID:1009
Source: W3SVC
Description:
A process serving application pool 'SDAAppPool' terminated unexpectedly. The process id was '2088'. The process exit code was '0x800703e9'.

安全事件查看器有以下几种失败审核:

EventID: 560
Source: Security
Category: Object Access
Description:
Object Open:
Object Server: SC Manager
Object Type: SERVICE OBJECT
Object Name: WinHttpAutoProxySvc
Handle ID: -
Operation ID: {0,557880730}
Process ID: 444
Image File Name: C:\WINDOWS\system32\services.exe
Primary User Name: EBTOPVNET01$
Primary Domain: EBSS
Primary Logon ID: (0x0,0x3E7)
Client User Name: NETWORK SERVICE
Client Domain: NT AUTHORITY
Client Logon ID: (0x0,0x3E4)
Accesses: Query status of service
Start the service
Query information from service
Privileges: -
Restricted Sid Count: 0
Access Mask: 0x94

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

EventID: 5000
Source: .NET Runtime 2.0 Error
User: N/A
Description:
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 错误)。我在另一个页面上进行了相同的用户检查,并且用户访问它没有问题。

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

最佳答案

从进程退出代码来看,似乎正在发生某种递归并且永远不会展开。令人惊叹的Tess Ferrandez有一篇很棒的文章这解释了如何调试此类问题:

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

关于某些用户的 ASP.NET IIS 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937316/

相关文章:

c# - 在动态表的 RadioButton CheckedChanges 中添加新的事件处理程序

c# - 在 ASP.Net 中从字节数组播放 AVI 文件

c# - JObject - 动态添加新对象

c# - 我可以从我的 ASP.NET 代码隐藏中调用一个 javascript 函数(来自经典 ASP)并获得它的结果吗?

rest - 是否可以在内部(私有(private))IIS 服务器上运行 Golang REST Web 应用程序?

javascript - 标记点击时进行反向地理编码

node.js - IIS 反向代理到 node.js

java - webMethods 获取 ServiceException 的根本原因

c# - 如何使用 C# 处理 401 错误响应?

java - 在java中使用Imgur API时出现401错误