我正在使用DotNetOpenAuth MVC依赖方示例代码(带有一些外观修改)将OpenId集成到ASP.NET MVC应用程序中。
代码效果很好,除了以下情况:当依赖方(我的应用程序)是IE下的受信任站点,并且我从主机以外的任何位置访问该站点时,重定向到OpenId提供程序挂起。
具体来说,代码到达控制器方法返回ActionResult的位置,ActionResult重定向到提供程序,然后IE就坐在那里并循环。
我知道可以在MVC中支持OpenId身份验证,即使依赖方是受信任的站点,因为我测试了stackoverflow本身并且它工作正常。
我使用Fiddler来查看流量,当我的应用程序是受信任的站点时,没有请求提供者。
有什么想法吗?
相关示例DotNetOpenAuth代码中的行是:
返回 openid.CreateRequest(的Request.Form [ “openid_identifier”])RedirectingResponse.AsActionResult();
更新#1 在Fiddler中,我可以看到我正在调用的控制器操作返回一个带有重定向位置标头的302响应,但之后什么也没发生。我重新测试了stackoverflow.com和nerdbank.org,并在这两个站点上看到了完全相同的失败行为。我添加了两个作为可信站点,完全关闭了IE,然后当我回到那些网站时,我无法成功登录。
我在Windows 7上运行IE 8.如果有帮助,我可以提供完整的Fiddler日志。
此外,我已经看到在各个地方提到当网站“受信任”时,IE会阻止重定向到不受信任的域。
更新#2
我将open id提供程序添加到我的受信任站点,现在重定向发生,因此登录过程有效。所以这确实似乎是一个用户代理(IE)问题。
更新#3
我找到了这个链接:link text
似乎描述了类似的问题。我按照建议的解决方案,将我的可信站点和常规互联网区域设置为IE中的“保护模式”。这似乎解决了我的问题。
答案 0 :(得分:2)
可信站点严格来说是IE功能,对RP的执行没有影响。所以我怀疑RP正在发送重定向到用户代理的指令。提琴手可以证实或反驳这一点。如果IE有一个“功能”打破从受信任站点重定向到不受信任的站点,那么我不确定RP可以做些什么。
顺便提一下,StackOverflow使用DotNetOpenId(DotNetOpenAuth的前身),所以你说它适合你的事实表明你的配置有些不同,你可以控制修复。
更新:Win7 RC在IE8中有一个错误,Win7 RTM有修复。如果您正在运行RC,请紧紧抓住RTM。您还可以在任何其他RTM Windows操作系统和IE浏览器上重试此方案。