我想出了一个由两部分组成的解决方案。
问题在于,当 Firefox 发出 OPTION 请求并被 401 拒绝时,它不会进一步尝试重新进行身份验证。这导致我绕过所有 OPTION 请求的身份验证。我找不到关于这个主题的太多信息,但我确实发现了这个:
401 response for CORS request in IIS with Windows Auth enabled
(以下引用原页面内容)
在 Firefox 中启用 NTLM 身份验证(单点登录)
本操作指南将介绍如何在 Firefox 中启用 NTLM 身份验证(单点登录)。
你们中有多少人注意到,当您使用 Internet Explorer 并浏览到公司的 Intranet 页面时,它会自动对您进行身份验证,但当您使用 Firefox 时,系统会提示您登录框?
最近,我在寻找允许使用 Apache 进行 NTLM 身份验证的解决方案时,偶然发现了如何在 Firefox 中设置首选项,将 NTLM 身份验证信息传递到 Web 服务器。首选项是 network.automatic-ntlm-auth.trusted-uris。
你是怎么做到的?
1) 打开 Firefox 并在地址栏中输入“about:config”。 (当然不带引号)
2) 在“过滤器”字段中输入以下“network.automatic-ntlm-auth.trusted-uris”
3)双击我们刚刚搜索到的首选项名称
4) 输入您希望将 NTLM 身份验证信息传递到的站点的 URL,格式如下:
http://intranet.company.com,http://email.company.lan
5) 请注意,您可以在此字段中使用逗号分隔的列表。
6)更新:我创建了 VBScript,可用于通过使用组策略或独立(如果出于某种原因您想使用它)将此信息插入到用户 prefs.js 文件中。
该脚本可在此处下载。
下载脚本后,您需要从 ZIP 存档中提取它,然后修改以 strSiteList 开头的行。
注意:如果用户在执行脚本时打开了 Firefox,则该脚本将不会执行其功能。通过组策略运行该脚本不会出现任何问题,除非由于某种原因您的组策略在执行该脚本之前启动了 Firefox。
您可以通读脚本的其余部分以获取更多信息。如果您有疑问、意见或疑虑,请告诉我。
基于此,我将匿名身份验证设置为Enabled在 api 项目的设置中(我仍然将 Windows 身份验证设置为Enabled).
运行项目(mvc 和 api)后,在发出 CORS 请求时系统提示我输入凭据。提供我的凭据后,我能够使用 Firefox 成功进行 GET/POST/PUTS。
为了消除 Firefox 中的凭据提示,我收到了来自布洛克·艾伦这让我走上了启用 NTLM 身份验证的道路。我找到了一个帖子here它提供了有关如何更改适当设置的说明。
添加后'http://localhost
' 到网络.协商-身份验证.可信-uris设置后,我现在可以使用 Firefox 对所有动词发出 CORS 请求,而无需提示输入凭据。