我有一个需要摘要身份验证的网站,当我用 IE8 浏览它时,即使密码正确,它也会给我 401。Firefox 和 Chrome 可以正常工作。我用 Fiddler 检查了授权标头,一切似乎都很好。你能给我关于这个问题的任何提示吗?
ps 另外,我在 C# 中实现摘要身份验证也有同样的问题,我不知道这两者是否相关。
我有一个需要摘要身份验证的网站,当我用 IE8 浏览它时,即使密码正确,它也会给我 401。Firefox 和 Chrome 可以正常工作。我用 Fiddler 检查了授权标头,一切似乎都很好。你能给我关于这个问题的任何提示吗?
ps 另外,我在 C# 中实现摘要身份验证也有同样的问题,我不知道这两者是否相关。
我遇到了这个问题,这是网络上唯一提到的。在摘要访问身份验证中,发生的事件顺序是。
这适用于 Firefox 和 Chrome,但不适用于 IE8。
我的意思是,如果我在服务器上的虚拟位置执行 GET,它会起作用,但是当我对静态文件执行 GET 时,它不起作用。在静态文件的情况下,我一次又一次地被提示登录。
使用嗅探器后,我发现在请求虚拟位置的情况下,事件发生的顺序如上所述,但是当我请求静态文件时,顺序如下:
基本上,当它是一个静态文件时,它使用用户名和密码,但从未在授权标头中发送它。服务器未收到此标头以 401 响应,再次提示登录。
为了让 IE8 正常工作,你必须欺骗它,认为这不是一个静态文件,而是一个虚拟位置。对我来说,这很容易,因为我可以访问服务器的源代码。如果您无法访问它,我真的不知道该怎么做。
如果您已请求虚拟位置。1. GET /virtual_location 2. 401 带有 WWW-Authenticate 标头,看起来像
WWW-Authenticate: Digest realm="validusers@robapi.abb", domain="127.0.0.1:80", qop="auth", nonce="9001cd8a528157344c6373810637d030", opaque="", algorithm="MD5", stale= “错误的”
注意 opapue 参数是一个空字符串。
另一方面,如果您请求一个静态文件 1. GET /staticfile.txt 2. 401 和 WWW-Authenticate 标头,看起来像
WWW-Authenticate: Digest realm="validusers@robapi.abb", domain="127.0.0.1:80", qop="auth", nonce="81bd1ca10ed6314570b7362484f0fd31", opaque="0-1c5-4f7f4c1e", algorithm=" MD5", 陈旧="假"
这里的 opaque 参数是一个非空字符串。
因此,如果您确保 opaque 参数始终为空字符串,IE8 会将其视为虚拟位置,请求将正常通过。因为我可以访问服务器的代码,所以我能够做到这一点。
希望这有任何帮助。
问候, Satya Sidhu
我有同样的问题。在我的例子中,我需要对我的整个站点进行摘要身份验证,使用“<Directory />”或“<Location />”中的指令。无论哪种方式都适用于 Mac、PC 和 iOS 上的 Firefox 和 Safari。不幸的是,IE8 似乎在这方面遇到了麻烦。在尝试了其他一些更改后,我终于发现如果我只需要对子目录(例如“<Location /private>”)进行身份验证,并将我的内容移动到受保护的目录中,IE8 就开始工作了。我来回走了几次,只改变了这个属性,以确认这是关键的区别。
顺便说一句,值得注意的是 tcpdump 显示 IE8 甚至没有尝试发送摘要身份验证。它显示了身份验证对话框,获取了我的用户名和密码,然后发送了一个没有身份验证信息的普通 GET 请求。
您是否(是否)保护了整个内容树?
我不确定为什么 IE8(并且只有 IE8)关心这种区别,但这就是我发现的。
在寻找问题的解决方案时,您的问题是唯一似乎相关的提及,而我在网上找不到任何答案。这让我相信要么没有人试图以这种方式配置 Digest 身份验证,要么大多数人只是放弃并使用 Firefox(或其他一些非 MS 浏览器)
哇,我肯定有同样的问题。我有两个虚拟主机,都使用摘要身份验证。在一个站点上,我试图保护整个站点(即),它适用于我尝试过的所有浏览器,除了IE8。在另一个站点上,我只保护一个子目录,这在 IE8 中运行良好。
我遇到了同样的问题,并尝试对整个虚拟主机使用摘要身份验证。但是下面的配置在 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>