当我使用fiddler来诊断我的mvc web应用程序时,我注意到有多次调用资源会返回401未经授权的错误,但随后会继续。
Result Protocol URL Body Caching Content-Type
1 401 HTTP /administration/index 6,334 private text/html; charset=utf-8
2 401 HTTP /administration/index 341 text/html; charset=us-ascii
3 200 HTTP /administration/index 511 private text/html; charset=utf-8
... images and stylesheets also return the same sequence
401 HTTP /administration/logo.png 6,322 text/html; charset=utf-8
401 HTTP /administration/logo.png 341 text/html; charset=us-ascii
200 HTTP /administration/logo.png 3,124 image/png
对于我正在访问的页面和图像都会发生这种情况。
网站使用ApplicationPoolIdentity在自己的应用程序池下运行,并且网站上有Windows身份验证。
对于不同的字符集,看起来资源被多次调用了吗?
有人可以告知可能导致这种情况发生的原因吗?
答案 0 :(得分:2)
当我使用fiddler来诊断我的mvc web应用程序时,我注意到了 有多次调用返回401的资源 未经授权的错误,但随后继续。
如果您使用Integrated Windows Authentication
,这是完全正常的。 Windows身份验证(a.k.a)NTLM是质询响应身份验证方案,客户端向受保护资源发送请求,服务器返回401和质询。然后,客户端使用此挑战生成授权标头,证明用户是他正在呈现的用户,而无需发送密码。域控制器被双方用作中介。
如果查看响应标题,您应该看到以下内容:
HTTP/1.1 401 Access Denied
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
然后客户端尝试第二次验证:
GET / HTTP/1.1
Host: host
Authorization: NTLM TlRMTVNTUAABAAAAB4IAoAAAAAAAAAAAAAAAAAAAAAB=
现在服务器向客户端发送质询:
HTTP/1.1 401 Access Denied
WWW-Authenticate: NTLM TlRMTVNTUAACAAAADAAMADAAAAAFgoGgCY6qiih5j bAAAAAAAAAAAH4AfgA8AAAAUABPAFIAVAA4ADAAAgAMAFAATwBSAFQA OAAwAAEACgBKAEwASQBNAEEABAAkAHAAbwByAHQAOAAwAHMAbwBmA HQAdwBhAHIAZQAuAGMAbwBtAAMAMABqAGwAaQBtAGEALgBwAG8AcgB0 ADgAMABzAG8AZgB0AHcAYQByAGUALgBjAG8AbQAAAAAA
最后客户回应了这一挑战:
GET / HTTP/1.1
Host: host
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGIAAAAYABgAegAAAAwADAB AAAAACgAKAEwAAAAMAAwAVgAAAAAAAACSAAAABYKAoFAATwBSAFQAO AAwAGoAbABpAG0AYQBFAFIATgBFAFMAVACZTd1Br98zFkTowoPysC5ysMaXqb qycwRldOKyZJbCIZLxCfcZe3ZHiYQmG97jr89=