摘要身份验证无法在IE8,Firefox和Chrome上运行

时间:2010-02-03 14:58:08

标签: c# firefox internet-explorer-8 google-chrome digest-authentication

我有一个需要摘要认证的网站,当我用IE8浏览它时,它给我401即使密码是正确的。 Firefox和Chrome工作正常。我用Fiddler检查了授权标题,一切似乎都没问题。你能给我一些关于这个问题的提示吗?

P.S。另外我在C#中实现摘要式身份验证时遇到同样的问题,我不知道这两者是否相关。

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。就我而言,我要求使用“< Directory />”中的指令对我的整个网站进行摘要式身份验证。或“< Location />”。无论哪种方式适用于Mac,PC和iOS上的Firefox和Safari。不幸的是,IE8似乎遇到了麻烦。在尝试了其他几个更改后,我终于发现,如果我只需要在子目录上进行身份验证(例如“< Location / private>”),并将我的内容移动到受保护的目录中,IE8就开始工作了。我来回走了几次,只更改了这个属性,以确认这是关键的区别。

顺便提一下,值得注意的是,tcpdump显示IE8甚至没有尝试发送摘要身份验证。它显示了auth对话框,获取了我的用户名和密码,然后发送了一个没有身份验证信息的正常GET请求。

您是否正在保护整个内容树?

我不确定为什么IE8(只有IE8)关心这种区别,但这就是我发现的。

在寻找问题的解决方案时,你的唯一提及似乎是相关的,我在网上找不到答案。这让我相信没有人试图以这种方式配置摘要身份验证,或者大多数人只是放弃并使用Firefox(或其他一些非MS浏览器)

答案 1 :(得分:1)

哇,我肯定遇到同样的问题。我有两个虚拟主机,都使用摘要式身份验证。在一个网站上我试图保护整个网站(即),它适用于我尝试过的所有浏览器除了 IE8。在另一个网站上,我只保护一个子目录,这在IE8中运行良好。

答案 2 :(得分:1)

我遇到了这个问题,这是网上唯一提到的问题。在摘要访问身份验证中,发生的事件序列为。

  1. 获取/ url
  2. 401,带有WWW-Authenticate标头 这会弹出浏览器上的登录对话框。输入凭证后。
  3. 获取/ url以及授权标题。
  4. 200 OK(如果一切顺利)。
  5. 这适用于Firefox和Chrome,但不能完全用于IE8。

    完全我的意思是,如果我在服务器上的虚拟位置上进行GET工作,那么当我在静态文件上执行GET时它不起作用。在静态文件的情况下,我被一次又一次地提示登录。

    在使用嗅探器之后,我发现在请求虚拟位置的情况下,事件序列如上所述发生,但当我请求静态文件时,序列如下:

    1. 获取/ url
    2. 401,带有WWW-Authenticate标头 这会弹出浏览器上的登录对话框。输入凭证后。
    3. 获取/ url(没有授权标题)
    4. 401 Un-Authorized。
    5. 基本上,当它是一个静态文件时,它使用了用户名和密码,但从未在Authorization标头中发送过它。没有获得此标头的服务器响应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” ,陈旧=“假”

      注意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”,stale =“FALSE”

      这里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>