MVC应用程序多次调用资源

时间:2013-07-10 11:36:33

标签: c# asp.net-mvc-4 fiddler

当我使用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身份验证。

对于不同的字符集,看起来资源被多次调用了吗?

有人可以告知可能导致这种情况发生的原因吗?

1 个答案:

答案 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=