我有两台服务器,都运行 IIS7.5。
它们都运行相同版本的基于 Web 的应用程序,该应用程序占用多个应用程序池(它作为许多小服务等运行)。
我有一个 Excel 插件,可以连接到该应用程序并提取数据。
我所知道的两台机器之间的唯一区别是,正在运行的机器使用标准帐户、localsystem、apppoolidentity 等运行其所有应用程序池。
失败的程序对其大多数应用程序池(主要是 Web 应用程序使用的)使用特定的服务帐户。
问题的关键似乎在于,在工作机器上,交换如下 -
POST /Service/Hierarchy.svc - 80 - 10.100.69.49 - 200 0 0 0
GET /Application/login/login.dll - 80 DOM\Account 10.100.69.49 - 200 0 0 140
在发生故障的服务器上
POST /Service/Hierarchy.svc - 80 - 10.100.69.49 - 200 0 0 0
GET /Application/login/login.dll - 80 - 10.100.69.49 - 401 2 5 358
请注意,帐户没有通过。
我所看到的所有其他设置都相同,除了......在应用程序/登录/登录.dll身份验证设置上,在工作服务器上是协商然后是NTLM,在故障服务器上,如果我这样放置它,那么应用程序的其他部分将停止工作,并出现401个需要凭据的挑战。
有人能提供关于如何调试这个问题的建议吗?
谢谢
编辑:这是失败尝试的精简版 wireshark 捕获。
GET /Application/login/login.dll HTTP/1.1
Authorization: Negotiate YIILwgYGKwYBBQUCoIILtjCCC7KgM...etc
Host: MachineName
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/7.5
WWW-Authenticate: Negotiate oYGNMIGKoAMKAQGhC...etc
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Wed, 20 Apr 2016 05:42:58 GMT
Content-Length: 1293
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...html
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
...html
<div id="header"><h1>Server Error</h1></div>
<h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>
<h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
...html
GET /Application/login/login.dll HTTP/1.1
Authorization: Negotiate oYILiTCCC4WgAwoBAa...etc
Host: MachineName
HTTP/1.1 401 Unauthorized
Content-Type: text/html
Server: Microsoft-IIS/7.5
WWW-Authenticate: Negotiate oX8wfaADCgEBonYEdGByBgk...etc
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Wed, 20 Apr 2016 05:42:58 GMT
Content-Length: 1293
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...html
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
...html
<div id="header"><h1>Server Error</h1></div>
...html
<h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>
<h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
...html
我知道相关用户可以访问请求中的 URL,因此我可以手动调用 /Application/login/login.dll。
是
GET /Application/login/login.dll HTTP/1.1
Authorization: Negotiate YIILwgYGKwYBBQUCoIILtjCCC7KgM...etc
Host: MachineName
它尝试传递用户名吗?这会失败吗?这就是为什么我看不到用户被传递的原因?
再次感谢
编辑:
我在 Wireshark 中看到了之前没有的 KRB5KRB_AP_ERR_MODIFIED,而且在详细信息中它列出了运行 AppPool 的 ServiceAccount。
所以我认为这可能与此有关 -Windows 身份验证 KRB5KRB_AP_ERR_MODIFIED
答案1
哎呀,修好了 :)
只需在应用程序/登录/站点中的 Windows 身份验证的身份验证设置中检查启用内核模式身份验证。
我注意到它说如果对应用程序池使用自定义标识则保持启用状态。