2014-01-13 72 views
10

再一次我卡住了!我正嘗試使用個人帳戶實現具有ASP.NET標識的安全WebApi服務。 WebApi服務將被使用phonegap開發的移動應用程序使用。我的phonegap應用程序使用Facebook和Twitter登錄,我已經完美地在客戶端實現了這一點。使用WebApi和外部登錄的ASP.NET身份

我從visual studio模板創建了一個SPA項目,我測試了使用fiddler和chrome dev工具監視HTTP請求的登錄過程。我曾嘗試使用郵遞員

得到以下請求:http://localhost:49577/api/Account/ExternalLogins?returnUrl=/&generateState=true

迴應:

[{ 
     "Name": "Facebook", 
     "Url": "/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A49577%2F&state=jpePf27F3ufkCCEldFdoOVMEGBGTEO1CrRdUQ3bHEP01", 
     "State": "jpePf27F3ufkCCEldFdoOVHSGBGTEO1CrRdUQ3bHEP01" 
}] 

,然後我打電話 GET:http://localhost:49577/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A49577%2F&state=jpePf27F3ufkCCEldFdoOVMEGBGTEO1CrRdUQ3bHEP01 這就要求AccountsController的GetExternalLogin方法。然後,當用戶未通過身份驗證時,它將返回ChallengeResult的一個實例。

這是我卡住的地方。 Q1:ChallengeResult強制使用一些查詢字符串參數重定向到301登錄頁面。我不希望這樣,我想讓它給我參數,但讓我處理我的ajax請求中的日誌記錄。我曾嘗試註釋掉這行代碼

Request.GetOwinContext().Authentication.Challenge(LoginProvider); 

,但我最終得到沒有別的401,我怎麼可以控制從ChallegeResult反應? Q2302。另外,我不能完全弄清楚下一步,在我從facebook獲得一個訪問令牌後,如果我已經獲得訪問令牌,應該調用什麼webapi端點,我應該傳遞給它什麼?

我一整天都在Google上搜索,但找不到任何回答我的問題的東西。任何幫助,將不勝感激。 由於

UPDATE:

關於Q2;我想通了,下一步,這就是 GET:http://localhost:49164/signin-facebook?code=...&state=...

這將返回另一個302重定向到

http://localhost:49164/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A49164%2F&state=7oGPd37EA-nmtXPtYEQ40qnretDeKjbPEM1gNkb2DuM1 

這反過來又返回另一個302,然後重定向到

http://localhost:49164/#access_token=... 

那麼如何我是否處理來自移動非瀏覽器客戶端的所有重定向?

UPDATE

我想找到一個處理 http://localhost:49164/signin-facebook?code=...&state=... 誰能幫控制器行動?

UPDATE 我已經發布這個問題了解了很多關於facebool登錄流,這也許我應該做過! 我仍然有一個問題,但我已創建a different question for that here以保持混亂

+0

I我也在爲此苦苦掙扎...我有一個angularJs應用程序,我試圖在沒有WebApi的情況下使用FB登錄,僅使用FB JS SDK。但是,我仍然堅持從Facebook接收認證數據的地方。這裏是我的問題以供參考:http://stackoverflow.com/questions/22846510/handling-server-redirect-to-facebook-login-page-in-angularjs –

回答