2008-11-07 32 views
1

我实现了一个ASP.Net 2.0 web应用程序的OpenID支持,并且我的本地机器上的一切似乎都能正常工作。我应该支持'mysite.com'和'www.mysite.com'吗? OpenID问题?

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

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

是否有可能从mysite.comwww.mysite.com切换导致会话切换?

的另一个问题是www.mysite.com不是mysite.com的境界之下。

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

回答

2

解决你提到的是容易的境界问题。只需将领域设置为* .mysite.com而不是mysite.com。如果您使用库中包含的ASP.NET控件之一,则只需在控件上设置一个属性即可设置领域。如果以编程方式进行编程,则可在调用RedirectToProvider()之前在IAuthenticationRequest对象上设置属性。

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

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

谢谢,我不知道我可以在领域使用通配符。 – tpower 2009-01-07 17:08:24

1

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

+0

这似乎是什么stackoverflow呢。 – tpower 2008-11-07 20:13:11

1

的cookie和session和其他一切迷路之间www.site.com和site.com。我没有足够的耐心仔细阅读所有的规格,但http://www.w3.org/Protocols/rfc2109/rfc2109指出

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

注意域匹配是不是 交换操作:abccom 域上匹配.c.com,但不 反向。

我认为这意味着是的,你确实需要转发到www。在使用Cookie和会话时,我总是将域校正代码添加到我的网站。

相关问题