我为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
的绝对网址链接到登录页面吗?或者这些只是隐藏了另一个问题?
答案 0 :(得分:2)
解决你提到的领域问题很简单。只需将领域设置为* .mysite.com而不仅仅是mysite.com。如果您正在使用库中包含的某个ASP.NET控件,则只需在控件上设置一个属性即可设置该域。如果您是以编程方式执行此操作,则在调用RedirectToProvider()之前在IAuthenticationRequest对象上设置该属性。
就会话/ cookie问题与www和非www主机名之间的跳跃有关,你有两个选择:
答案 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和会话时,我总是向我的网站添加域名更正代码。