【发布时间】:2012-10-12 23:25:55
【问题描述】:
从一个 MVC 应用程序,我正在采购一个 iCal 订阅,并按照这个 SO 问题的答案进行身份验证:
Serving an iCalendar file in ASPNET MVC with authentication
iCal 流是使用 DDay.iCal 库从数据库中的事件动态创建的。
此解决方案在本地开发服务器上运行良好:OSX 日历和 Outlook 都可以订阅和接收来自应用程序的更新。
但是,在我的 Web 主机的共享服务器上,日历和 Outlook 的身份验证都失败了。也就是说,在(正确的)失败后,他们都一直要求我输入用户名和密码。
编辑:如果我将浏览器指向日历 URL,它也会无法通过身份验证。
编辑:越来越奇怪——Firefox 验证并获取 iCal 文件。 Safari、Chrome 和 IE 验证失败。
如果我使用相同的凭据将 curl 指向日历 URL,我就成功了(即我得到了所需的 iCal 文件)。当然,同样的凭据也可用于登录 MVC 应用程序。
编辑——我想我知道发生了什么,但我不知道如何解决它。在我的OnAuthorization() 中,我只添加了WWW-Authentication Basic,但使用 Fiddler 我可以看到提供了三种类型的身份验证:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Secure Calendar"
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
... etc ...
此时只有 Firefox 响应基本授权,成功。
GET <<URL>> HTTP/1.1
...
Authorization: Basic <<encoded credentials>>
IE 以 Negotiate 响应,但失败
GET <<URL>> HTTP/1.1
...
Authorization Negotiate <<encoded stuff>>
谁在添加另外两个,我怎样才能让它停止?以下是来自服务器响应的更多详细信息:
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
谢谢, 埃里克
【问题讨论】:
标签: asp.net-mvc-3 iis-7 icalendar plesk