2008-11-07 55 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和會話時,我總是將域校正代碼添加到我的網站。

相關問題