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没有尝试使用该服务进行身份验证.
有没有人找到解决这个问题的方法?
我想出了一个由两部分组成的解决方案.
问题是,当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请求,而不会提示输入凭据.
归档时间: |
|
查看次数: |
9265 次 |
最近记录: |