2013-01-08 46 views
1

我想實現一個用戶重定向到OAuth2.0用戶登錄服務器簡單的登錄頁面,然後再返回到回調URL後,他們已經成功登錄。會話更改請求和處理用戶授權

之間

但是我不斷獲取的異常與錯誤消息:有回調 客戶端狀態不匹配的期望值收到

意外OAuth授權響應。

從調試我注意到,在調用「RequestUserAuthorization()」之前和之後的會話ID是不同的。

我從一些SO閱讀的答案,我需要以某種方式防止會話更改,但不知道如何實現在這種情況下。

任何幫助將不勝感激,謝謝!

我蒸餾水執行情況如下:

private readonly WebServerClientCustomImpl _oauthClient = new WebServerClientCustomImpl(); 

public ActionResult Login() 
     {  
      IAuthorizationState auth = null; 

      auth = _oauthClient.ProcessUserAuthorization(); 

      if (auth == null) 
      { 
       _oauthClient.RequestUserAuthorization(returnTo: _redirectUrl); 
      } 
      else 
      { 
       // Save authentication information into cookie. 
       HttpContext.Response.Cookies.Add(auth.CreateAuthCookie()); 

       return RedirectToAction("Index", "Home"); 
      } 

      ViewBag.Message = "Future login page..."; 
      return View(); 
     } 
+0

我想提醒任何其他碰到此問題的人,確保在測試時,不要混合localhost域和您的應用程序URL域...如果您這樣做,OAuth服務器的回調將創建一個新的會話。 –

+0

你的意思是不混合localhost域和你的應用程序的URL域嗎?沒有得到那部分 – Cris

回答

1

如果你有問題的SessionID改變它在大多數情況下,意味着在Session對象沒有此用戶。只需添加任何會話和SessionId應保持相同的用戶:

Session["UserIsHere"] = true; 
+1

嗨,這也適用於ASP.Net MVC? –

+3

會話狀態是ASP.NET功能,而不是視圖特定功能。所以無論是Web表單還是MVC都無所謂。 –

+0

@AndrewArnott可以通過WebServerClient的RequestUserAuthorization方法讓Controller啓動一個新的會話嗎?使用上面提到的方法,我的會話ID保持不變,直到命中RequestUserAuthorization。前一個會話ID傳遞給auth服務器,但在登錄後返回到Web客戶端時,客戶端的會話ID發生變化。 –

0

我有相同的消息,但不同的問題。

我註冊在谷歌oauth面板的網址(來源和重定向)開始於www。

一些用戶在沒有www的情況下訪問網絡,並且出現錯誤消息。

i.e.Google的cPanel的conf:HTTP:// www.somesite.com,重定向到http:// www.somesite.com/oauth2

一些用戶訪問http:// somesite.com。

解決方案: 限制用戶僅使用www版本或將裸域重定向到www,因此身份驗證請求始終來自Oauth面板中的註冊域。

希望它能幫助!