我安装了一个应用程序,需要在 Windows 2012、IIS 8.5 下进行 Windows 身份验证。当某些用户使用该应用程序时,他们在质询/响应后收到 401 错误。其他人可以毫无问题地使用该网站。这些用户恰好都在同一个 AD 组中,但这可能是巧合。
以下是处理的请求和响应(该网站是我们内部的,http://lcf-- 这是一条 A 记录,而不是 CNAME):
要求:
回复:
在安全日志中,通常显示以下内容:
An account failed to log on.
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Type: 3
Account For Which Logon Failed:
Security ID: NULL SID
Account Name: test1
Account Domain: CORP
Failure Information:
Failure Reason: Account locked out.
Status: 0xC0000234
Sub Status: 0x0
Process Information:
Caller Process ID: 0x0
Caller Process Name: -
Network Information:
Workstation Name: 1N14SW1-PC
Source Network Address: -
Source Port: -
Detailed Authentication Information:
Logon Process: NtLmSsp
Authentication Package: NTLM
Transited Services: -
Package Name (NTLM only): -
Key Length: 0
给定的帐户(“test1”)没有因为登录失败等原因而被 Active Directory 锁定。我认为这里的锁定一定来自 IIS。
在 IIS 日志中,这是一个相关条目:
2015-04-06 13:41:27 10.0.150.6 GET /Loss - 80 CORP\test1 10.0.20.28 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/6.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+Media+Center+PC+6.0;+.NET4.0C;+.NET4.0E;+InfoPath.3;+EIE10;ENUSWOL) - 401 0 0 15
对于网站:
- 仅启用 Windows 身份验证,所有其他身份验证均被禁用。
- Windows Auth、扩展保护已关闭并且内核模式身份验证已启用。
- 提供商是 Negotiate 和 NTLM。(上面的标题证实了这一点。)
- 授权规则设置为允许所有用户
我也试过多种浏览器。事实上,在同一台机器上切换用户会产生不同的结果。(机器 A 上的用户 A 没问题,机器 A 上的用户 B 则不行。)这些机器位于同一个内联网上。
编辑:我添加了一个顶层“test.html”文件以使事情变得简单。我打开了失败日志记录,这是我的结果。有人能读懂这些符文吗?
编辑
Lockoutstatus.exe 在该域的所有 12 个 DC 上均显示“未锁定”。
登录成功:
An account was successfully logged on. Subject: Security ID: NULL SID Account Name: - Account Domain: - Logon ID: 0x0 Logon Type: 3 Impersonation Level: Impersonation New Logon: Security ID: CORP\xxxx1 Account Name: xxxx1 Account Domain: CORP Logon ID: 0x12E1355 Logon GUID: {00000000-0000-0000-0000-000000000000} Process Information: Process ID: 0x0 Process Name: - Network Information: Workstation Name: 1N14SW1-PC Source Network Address: - Source Port: - Detailed Authentication Information: Logon Process: NtLmSsp Authentication Package: NTLM Transited Services: - Package Name (NTLM only): NTLM V2 Key Length: 0
我对 Google 的了解已经到极限了。有什么建议吗?
答案1
被锁定的用户全都在同一个 AD 组中,这可能并非巧合。这些用户可能没有访问应用程序文件夹的 NTFS 权限。为了避免这个问题,我做了以下操作,确保应用程序池标识帐户用于所有文件访问,并且永远不会出现任何冒充行为。
打开 IIS 管理器。选择站点下的应用程序。双击“配置编辑器”图标。在“部分”下拉列表中,找到system.webServer/serverRuntime
。将其设置为UseWorkerProcessUser
。
使用 appcmd.exe 或 .config 文件可以完成相同的操作。
有点令人惊讶的是,这不是默认行为。显然,在使用 Windows 身份验证和默认设置 ( UseAuthenticatedUser
) 时,一些文件访问是使用浏览网站的用户的权限执行的,而一些文件访问是使用应用程序池身份的权限执行的。就我个人而言,我总是只想使用应用程序池身份的权限,所以我必须记住调整上面描述的设置。