我应该支持'mysite.com'和'www.mysite.com'吗? OpenID问题?

时间:2008-11-07 20:09:18

标签: asp.net openid

我为ASP.Net 2.0 Web应用程序实现了OpenID支持,一切似乎都在我的本地计算机上运行良好。

我正在使用DotNetOpenId库。在我重定向到第三方网站之前,我将原始OpenID存储在会话中,以便在用户通过身份验证时使用(我相信标准做法)。

但是我习惯在地址栏输入网址时不输入www。当我在实时服务器上测试登录时,我遇到了会话被清除的问题。我的返回网址被硬编码为www.mysite.com。

是否可能从mysite.com切换到www.mysite.com导致会话切换?

另一个问题是www.mysite.com不属于mysite.com的范畴。

这些问题的标准解决方案是什么?网站应该自动重定向到www.mysite.com吗?我可以通过包含www的绝对网址链接到登录页面吗?或者这些只是隐藏了另一个问题?

3 个答案:

答案 0 :(得分:2)

解决你提到的领域问题很简单。只需将领域设置为* .mysite.com而不仅仅是mysite.com。如果您正在使用库中包含的某个ASP.NET控件,则只需在控件上设置一个属性即可设置该域。如果您是以编程方式执行此操作,则在调用RedirectToProvider()之前在IAuthenticationRequest对象上设置该属性。

就会话/ cookie问题与www和非www主机名之间的跳跃有关,你有两个选择:

  1. 不是将原始标识符存储在会话中,而是由于某些原因无论如何都是一个坏主意,使用IAuthenticationRequest.AddCallbackArguments(name,value)方法来存储用户输入的数据,然后使用IAuthenticationResponse.GetCallbackArgument(name)在用户进行身份验证时调用数据。
  2. 算了。 dotnetopenid库没有自动为您存储此信息的原因。定向身份只是一种情况:如果用户输入'yahoo.com',您可能不想对他们说'欢迎,yahoo.com!'而是'欢迎,id.yahoo.com/andrewarnott'!您将始终如一地获得正确行为的唯一方法是使用IAuthenticationResponse.FriendlyIdentifierForDisplay属性来决定向用户显示的内容作为其登录标识符。它提供了更准确的信息,并且比在回调中存储值并将其恢复更容易。 :)

答案 1 :(得分:1)

我不知道OpenID是如何工作的,但LiveID会根据用户和域的组合为您提供令牌。我只是将www转发给mysite.com。

答案 2 :(得分:1)

www.site.com和site.com之间的cookie和会话以及其他一切都会丢失。我没有足够的耐心来彻底阅读所有规范,但是http://www.w3.org/Protocols/rfc2109/rfc2109声明了

  

A是FQDN字符串并具有表单   NB,其中N是非空名称   字符串,B的形式为.B',而B'是   一个FQDN字符串。 (所以,x.y.com   域名匹配.y.com但不是y.com。)

     

请注意,域匹配不是   交换操作:a.b.c.com   domain-matches .c.com,但不是   反转。

我认为这意味着是的,你需要转发到www。当使用cookie和会话时,我总是向我的网站添加域名更正代码。