我有一个需要摘要认证的网站,当我用IE8浏览它时,它给我401即使密码是正确的。 Firefox和Chrome工作正常。我用Fiddler检查了授权标题,一切似乎都没问题。你能给我一些关于这个问题的提示吗?
P.S。另外我在C#中实现摘要式身份验证时遇到同样的问题,我不知道这两者是否相关。
答案 0 :(得分:1)
我遇到了同样的问题。就我而言,我要求使用“< Directory />”中的指令对我的整个网站进行摘要式身份验证。或“< Location />”。无论哪种方式适用于Mac,PC和iOS上的Firefox和Safari。不幸的是,IE8似乎遇到了麻烦。在尝试了其他几个更改后,我终于发现,如果我只需要在子目录上进行身份验证(例如“< Location / private>”),并将我的内容移动到受保护的目录中,IE8就开始工作了。我来回走了几次,只更改了这个属性,以确认这是关键的区别。
顺便提一下,值得注意的是,tcpdump显示IE8甚至没有尝试发送摘要身份验证。它显示了auth对话框,获取了我的用户名和密码,然后发送了一个没有身份验证信息的正常GET请求。
您是否正在保护整个内容树?
我不确定为什么IE8(只有IE8)关心这种区别,但这就是我发现的。
在寻找问题的解决方案时,你的唯一提及似乎是相关的,我在网上找不到答案。这让我相信没有人试图以这种方式配置摘要身份验证,或者大多数人只是放弃并使用Firefox(或其他一些非MS浏览器)
答案 1 :(得分:1)
答案 2 :(得分:1)
我遇到了这个问题,这是网上唯一提到的问题。在摘要访问身份验证中,发生的事件序列为。
这适用于Firefox和Chrome,但不能完全用于IE8。
完全我的意思是,如果我在服务器上的虚拟位置上进行GET工作,那么当我在静态文件上执行GET时它不起作用。在静态文件的情况下,我被一次又一次地提示登录。
在使用嗅探器之后,我发现在请求虚拟位置的情况下,事件序列如上所述发生,但当我请求静态文件时,序列如下:
基本上,当它是一个静态文件时,它使用了用户名和密码,但从未在Authorization标头中发送过它。没有获得此标头的服务器响应401再次提示登录。
为了让IE8正常工作,你必须愚弄它,认为这不是一个静态文件,而是一个虚拟位置。对我来说,这很简单,因为我访问了服务器的源代码。如果你无法访问它,我真的不知道该怎么做。
如果您申请了虚拟位置。 1. GET / virtual_location 2. 401带有WWW-Authenticate标题,看起来像
注意opapue参数是一个空字符串。
另一方面,如果您请求了静态文件 1. GET /staticfile.txt 2. 401带有WWW-Authenticate标题,看起来像
这里opaque参数是非空字符串。
因此,如果您确保opaque参数始终为空字符串,则IE8会将其视为虚拟位置,并且请求将正常进行。由于我可以访问服务器的代码,因此能够执行此操作。
希望这有任何帮助。
此致 Satya Sidhu
答案 3 :(得分:0)
我遇到了同样的问题,并尝试对整个虚拟主机使用摘要式身份验证。但是以下配置在IE上不起作用。
<Location />
AuthType Digest
AuthName "Login"
AuthDigestDomain /
AuthUserFile /path/to/.htdigest
Require valid-user
</Location>
http://lists.centos.org/pipermail/centos/2013-January/131225.html中的解决方法效果很好:
ErrorDocument 401 "some random text"
更好的解决方案是排除通常位于/ error /.*
的apache错误页面e.g.
Alias /error/ "/usr/share/apache2/error/"
以下配置对我来说效果很好(另请参阅https://bz.apache.org/bugzilla/show_bug.cgi?id=10932#c5):
<LocationMatch "^/(?!error/)">
AuthType Digest
AuthName "Login"
AuthDigestDomain /
AuthUserFile /path/to/.htdigest
Require valid-user
</LocationMatch>