C# 摘要认证在IE8上不起作用,Firefox和Chrome都可以

C# 摘要认证在IE8上不起作用,Firefox和Chrome都可以,c#,firefox,internet-explorer-8,google-chrome,digest-authentication,C#,Firefox,Internet Explorer 8,Google Chrome,Digest Authentication,我有一个需要摘要认证的网站,当我用IE8浏览它时,即使密码是正确的,它也会给我401。Firefox和Chrome工作正常。我用Fiddler检查了授权标题,一切都很好。关于这个问题你能给我一些提示吗 p、 此外,我在C#中实现摘要身份验证时也遇到了同样的问题,我不知道这两者之间有什么关联。我也遇到了同样的问题。在我的例子中,我要求使用“”或“”中的指令对整个站点进行摘要身份验证。无论哪种方式都适用于Mac、PC和iOS上的Firefox和Safari。不幸的是,IE8似乎在这方面有问题。在尝试

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


p、 此外,我在C#中实现摘要身份验证时也遇到了同样的问题,我不知道这两者之间有什么关联。

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

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

您是否在保护整个内容树

我不知道为什么IE8(只有IE8)关心这个区别,但这就是我发现的


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

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

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

您是否在保护整个内容树

我不知道为什么IE8(只有IE8)关心这个区别,但这就是我发现的


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

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

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

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

  • 登录/url
  • 401,带有WWW-Authenticate头 这将在浏览器上弹出登录对话框。在您输入凭据之后
  • 使用/url和授权头
  • 200好(如果一切顺利)
  • 这在Firefox和Chrome上运行良好,但在IE8上并不完全有效

    我的意思是,如果我在服务器上的一个虚拟位置上做了一个GET,它就工作了,但是当我在一个静态文件上做GET时它就不工作了。在一个静态文件的情况下,一次又一次地提示我登录

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

  • 登录/url
  • 401,带有WWW-Authenticate头 这将在浏览器上弹出登录对话框。在您输入凭据之后
  • 登录/url(无授权标头)
  • 401联合国授权
  • 基本上,当它是一个静态文件时,它接受用户名和密码,但从未在授权头中发送它。未获取此标头的服务器响应401,再次提示登录

    要使IE8正常工作,您必须愚弄它,让它认为这不是一个静态文件,而是一个虚拟位置。对我来说,这很容易,因为我可以访问服务器的源代码。如果你没有权限,我真的不知道怎么做

    如果您已请求虚拟位置。 1.获取/虚拟位置 2.401,带有WWW身份验证标头,该标头类似于

    WWW-Authenticate:Digest-realm=”validusers@robapi.abb,domain=“127.0.0.1:80”,qop=“auth”,nonce=“9001CD8A52815734C6373810637D030”,opaque=“”,algorithm=“MD5”,stale=“FALSE”

    请注意,opapue参数是一个空字符串

    另一方面,如果您请求一个静态文件 1.GET/staticfile.txt 2.401,带有WWW身份验证标头,该标头类似于

    WWW-Authenticate:Digest-realm=”validusers@robapi.abb,domain=“127.0.0.1:80”,qop=“auth”,nonce=“81bd1ca10ed6314570b7362484f0fd31”,opaque=“0-1c5-4f7f4c1e”,algorithm=“MD5”,
    <Location />
        AuthType Digest
        AuthName "Login"
        AuthDigestDomain /
        AuthUserFile /path/to/.htdigest
        Require valid-user
    </Location>
    
    ErrorDocument 401 "some random text"
    
    e.g.
    Alias /error/ "/usr/share/apache2/error/"
    
    <LocationMatch "^/(?!error/)">
        AuthType Digest
        AuthName "Login"
        AuthDigestDomain /
        AuthUserFile /path/to/.htdigest
        Require valid-user
    </LocationMatch>