Asp.net mvc 当依赖方是受信任的站点时,DotNetOpenAuth-OpenId登录重定向挂起

Asp.net mvc 当依赖方是受信任的站点时,DotNetOpenAuth-OpenId登录重定向挂起,asp.net-mvc,openid,dotnetopenauth,Asp.net Mvc,Openid,Dotnetopenauth,我正在使用DotNetOpenAuth MVC依赖方示例代码(进行了一些外观上的更改)将OpenId集成到ASP.NET MVC应用程序中 除了以下情况外,代码工作得很好:当依赖方(我的应用程序)是IE下的受信任站点,并且我从主机以外的任何位置访问该站点时,指向OpenId提供程序的重定向将挂起 具体地说,代码到达了控制器方法返回一个ActionResult的点,该ActionResult重定向到提供者,然后IE只是坐在那里循环 我知道在MVC中支持OpenId身份验证是可能的,即使依赖方是一个

我正在使用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,然后当我返回到这些站点时,我无法成功登录

我正在Windows7上运行IE8。如果有帮助的话,我可以提供完整的Fiddler日志

此外,我在很多地方都提到,当一个站点是“受信任的”时,IE会阻止重定向到不受信任的域

更新#2

我将开放id提供程序添加到我的受信任站点,现在发生重定向,因此登录过程正常。所以这似乎确实是一个用户代理(IE)问题

更新#3

我找到了这个链接:


它似乎描述了一个类似的问题。我按照建议的解决方案,在IE中将我的受信任站点和常规internet区域设置为“受保护模式”。这似乎解决了我的问题。

受信任站点严格来说是IE功能,对RP的执行没有影响。因此我怀疑RP正在发送重定向到用户代理的指令。小提琴手可以证实或反驳这一点。如果IE有一个“功能”可以中断从受信任站点到不受信任站点的重定向,那么我不确定RP能做些什么

顺便说一句,StackOverflow使用DotNetOpenId(DotNetOpenAuth的前身),因此,您说它为您工作的事实表明,您的配置中存在一些不同之处,您可以控制加以修复


更新:Win7 RC在IE8中有一个bug,Win7 RTM已经修复。如果您正在运行RC,请耐心等待RTM可用。您也可以在任何其他RTM Windows操作系统和IE浏览器上重试此方案

您正在使用IE,当nerdbank.org是受信任的站点时,nerdbank.org/rp登录对您有效?我以为stackoverflow可以工作,但我发现我必须完全注销,将其添加到我的受信任站点,然后重新启动IE以进行一个干净的测试。我从nerdbank.org/rp注销,关闭浏览器(使其成为受信任站点后),然后重新运行测试。它对我仍然有效。不过,如果你能提出任何其他建议来帮助我重做,我很乐意进行调查。啊,刚刚注意到你对这个问题的更新。我同意你的看法,这完全是IE的问题,RP对此无能为力。你能提供一个关于IE重定向的参考吗?我用一个链接更新了我原来的问题。一旦可信站点和internet站点都设置为相同级别的保护模式(开/关),重定向就起作用了。我更新了我的答案,以包括我刚从MSFT学到的内容:Win7 RC有一个听起来像您描述的错误。Win7 RTM有修复方法。事实上,跨完整性级别重定向总是很棘手的。但是,即使在获得允许正确重定向的修复之后,某些站点也可能会出现问题。问题在于,中等完整性IE(可信区域)和低完整性IE(Internet区域)具有不同的cookie存储。在一个完整性级别上设置的cookie在另一个完整性级别上不存在。对于我的特定场景,我不认为这里有问题。我从OpenId提供程序接收身份验证,然后在服务器端创建表单身份验证cookie。因此,无论我的应用程序运行在哪个信任区域,cookie都将被放置在cookie存储区中。如果有人在登录后更改了我的应用程序的信任区域,那么是的,这将是一个麻烦。