Web API 2.1 Windows身份验证CORS Firefox

aha*_*usa 10 asp.net firefox windows-authentication cors asp.net-web-api

这是场景:

我创建了一个web api项目和一个mvc项目,如下所示:

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

我通过nuget安装了CORS支持并添加了EnableCorsAttribute

我运行了这个项目,一切都按照预期(GET,PUT和POST)在Chrome,IE和FireFox上运行.

然后我在web api项目中启用了Windows身份验证(是的,我真的需要在api项目中使用win auth).为了使这个工作,我将xhrFields arg添加到我的jquery.ajax调用:

        $.ajax({
            type: method,
            url: serviceUrl,
            data: JSON.stringify(foo),
            contentType: 'application/json; charset=UTF-8',
            xhrFields: {
                withCredentials: true
            }
        }).done(function (data) {
            $('#value1').text(data);
        }).error(function (jqXHR, textStatus, errorThrown) {
            $('#value1').text(jqXHR.responseText || textStatus);
        });
Run Code Online (Sandbox Code Playgroud)

另外,我设置了EnableCorsAttribute.SupportsCredentials属性= true

我测试了一切.Chrome和IE工作,FireFox没有.Firefox收到401响应它的预检(OPTIONS)请求.

似乎FireFox没有尝试使用该服务进行身份验证.

有没有人找到解决这个问题的方法?

aha*_*usa 8

我想出了一个由两部分组成的解决方案.

问题是,当Firefox发出OPTION请求并被401拒绝时,它不再进一步尝试重新进行身份验证.这导致我绕过所有OPTION请求的旁路认证.我找不到关于这个主题的很多信息,但我确实发现了这个:

启用Windows身份验证的IIS中的CORS请求的401响应

基于此,我在api项目的设置中将Anonymous Authentication设置为Enabled(我仍然将Windows身份验证设置为Enabled).

运行项目(mvc和api)后,我在发出CORS请求时被提示输入凭据.提供我的凭据后,我能够成功地使用Firefox进行GET/POST/PUTS.

为了消除Firefox中凭据的提示,我收到了Brock Allen的提示,这使我无法启用NTLM身份验证.我在这里发现了一篇帖子,提供了如何进行适当设置更改的说明.

将' http://localhost' 添加到network.negotiate-auth.trusted-uris设置后,我现在可以使用Firefox发出针对所有动词的CORS请求,而不会提示输入凭据.