簡體   English   中英

Facebook Connect和ASP.NET Forms身份驗證 - 計時/ Cookie問題

[英]Facebook Connect & ASP.NET Forms Authentication - Timing/Cookie Problem

就是我所擁有的

  • ASP.NET 4.0 Web應用程序
  • 表單身份驗證(基於Cookie)

是我正在嘗試做的事情

  • 與Facebook Connect集成(使用JavaScript和Graph API)
  • 為我的用戶提供單點登錄服務(如果他們登錄並連接到Facebook,則自動登錄用戶)

在每個頁面上都有一個控件,顯示匿名/登錄的用戶詳細信息。

問題出現了:在這個用戶控件的Page_PreRender上(在每個頁面上,所以考慮在每個頁面請求上執行此事件),我嘗試根據Facebook身份驗證狀態(JavaScript API - Cookies)自動登錄。

如果登錄成功,我使用FormsAuthentication.SetAuthCookie登錄。

這一切都很好。

然而,在我單點登錄后(字面意思是下一行),我需要渲染出匿名的東西(請登錄)或經過身份驗證的用戶資料(顯示名稱等)。 問題是,用戶還沒有真正“驗證”我的網站。 要對我的網站進行“身份驗證”,我會做標准的事情(檢查HttpContext.User.Identity.IsAuthenticated屬性)。

我認為它尚未設置為"true ”,因為已經創建了Forms Auth cookie,但是在響應中, HttpContext.User.Identity.IsAuthenticated基於此時的請求 - 我是否就在那里?

當然,即使用戶已登錄,它也會顯示匿名詳細信息。

當我刷新頁面時,會顯示正確的用戶詳細信息。

所以它幾乎是一個時間問題。 如何自動登錄用戶(通過FormsAuthentication.SetAuthCookie )確保HttpContext.User.Identity.IsAuthenticated為真?

也許我在錯誤的地方進行身份驗證/單點登錄?

或者我需要幾乎做一個Response.Redirect給自己,以刷新HTTP請求中的cookie?

眾所周知,Facebook Connect的doco分散且極小,所以所有這些都是將事情拼湊在一起的問題。

任何幫助將不勝感激...歡呼!

好的,我找到了答案(這是我希望的答案,而不是答案)。

正如我預測的那樣, FormsAuthentication.SetAuthCookie在HTTP Response Stream中創建了一個身份驗證cookie。 但是HttpContext.User.Identity.IsAuthenticated讀取HTTP請求流(沒有cookie)。

所以解決方案是使用Response.Redirect(this.Context.Request.RawUrl, true)以編程方式刷新頁面(第二個參數終止當前頁面執行)以重新加載HTTP請求中的cookie。

這就是為什么我猜我們總是有一個Login.aspx頁面設置表單cookie,然后重定向到某個地方,因為當重定向到“某處”時,會發出另一個請求,以便刷新cookie。

我可能會將Facebook授權內容放在一個獨立的.aspx頁面中,並且與常規表單身份驗證相同。

哦,微軟人員在這里提到了“刷新”的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM