如何删除不需要的 WWW-Authenticate 标头

Eri*_*son 4 icalendar iis-7 plesk asp.net-mvc-3

从 MVC 应用程序中,我正在根据对这个 SO 问题的回答获取带有身份验证的 iCal 订阅:

使用身份验证在 ASPNET MVC 中提供 iCalendar 文件

iCal 流是使用 DDay.iCal 库从数据库中的事件动态创建的。

此解决方案在本地开发服务器上运行良好:OSX 日历和 Outlook 都可以从应用程序订阅和接收更新。

但是,在我的 Web 主机上的共享服务器上,日历和 Outlook 的身份验证均失败。也就是说,他们都在(正确的)失败后不断向我询问用户和密码。

编辑:如果我将浏览器指向日历 URL,它也会无法通过身份验证。

编辑:变得更奇怪——Firefox 验证并获取 iCal 文件。Safari、Chrome 和 IE 验证失败。

如果我使用相同的凭据将 curl 指向日历 URL,我就成功了(即我获得了所需的 iCal 文件)。当然,可以使用相同的凭据登录到 MVC 应用程序。

编辑 - 我想我知道发生了什么,但我不知道如何解决它。在我的OnAuthorization()I add onlyWWW-Authentication Basic但使用 Fiddler 我可以看到提供了三种类型的身份验证:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Secure Calendar"
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
... etc ...
Run Code Online (Sandbox Code Playgroud)

此时只有 Firefox 响应基本授权,它成功了。

GET <<URL>> HTTP/1.1
...
Authorization: Basic <<encoded credentials>>
Run Code Online (Sandbox Code Playgroud)

IE 以协商响应,但失败

GET <<URL>> HTTP/1.1
...
Authorization Negotiate <<encoded stuff>>
Run Code Online (Sandbox Code Playgroud)

谁在添加另外两个,我怎样才能让它停止?以下是来自服务器响应的更多详细信息:

HTTP/1.1 401 Unauthorized
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
WWW-Authenticate: Basic realm="Secure Calendar"
X-AspNet-Version: 4.0.30319
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
X-Powered-By-Plesk: PleskWin
Date: Tue, 23 Oct 2012 13:27:48 GMT
Run Code Online (Sandbox Code Playgroud)

谢谢,埃里克

Eri*_*son 5

呵呵,答案在于IIS配置。

我要求我的主机管理员关闭其他身份验证,这破坏了除 iCal 提要之外的所有内容。

现在他们又重新打开了几个,MVC 站点和带有身份验证的日历提要一样有效......哇!非常非常大的笑容。

这是我们最终得到的 IIS 配置:

Name                        Status         Response Type
Anonymous Authentication    Enabled
ASP.NET Impersonation       Disabled
Basic Authentication        Disabled       HTTP 401 Challenge
Digest Authentication       Disabled       HTTP 401 Challenge
Forms Authentication        Enabled        HTTP 302 Login/Redirect
Windows Authentication      Enabled        HTTP 401 Challenge
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会这样——或者还有什么可能会失败——但今天我很高兴。