1

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

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

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

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

另一个问题是 www.mysite.com 不在 mysite.com 的范围内。

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

4

3 回答 3

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 属性来决定向用户显示什么作为他的登录标识符。它提供了更准确的信息,并且比在回调中存储一个值并取回它更容易。:)
于 2008-12-17T04:36:41.377 回答
1

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

于 2008-11-07T20:10:56.410 回答
1

cookie 和会话以及其他所有内容在 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 和会话时,我总是向我的网站添加域更正代码。

于 2008-11-07T20:44:31.147 回答