2015-09-04 143 views
1

我已經創建了一個應用程序與用戶的asp.net mvc api,以下tutorial。 而且一切都很好。asp.net mvc API外部登錄

現在我試圖添加外部登錄(實際上只是Facebook)。 我一直在尋找如何做到這一點,我發現了一個答案here

所以我配置了Startup.Auth.cs配置了Facebook AppId/Secret。

我做出GET api/Account/ExternalLogins?returnUrl=%2F&generateState=true

打個電話,然後我重定向到指定的URL。然後我回到像http://localhost:49728/#access_token= ... &token_type=bearer&expires_in=2592000&state= ...

這裏是我的問題。接下來我應該怎麼做才能在網站上註冊用戶。

Web應用程序完成後,會有一個移動本機應用程序。

編輯
我改變了返回URL,在那裏我可以問,並保存用戶名。 到目前爲止不錯。

後,我保存新的用戶,我需要登錄,所以我想這樣的:

var state = new RegExp('[\&&]state=([^&#]*)').exec(window.location.href); 
       $.get(baseurl + 'api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=' + encodeURIComponent(baseurl) + '&state=' + state[1], function (data, status) { 
        console.log(data); 
       }); 

,但我得到的400錯誤請求錯誤。
我現在的問題是我該如何解決這個問題,並進行登錄?

回答

3

您需要承擔由此產生的訪問令牌,並用它來調用RegisterExternal網絡電話,將其添加到授權頭就像這樣(使用郵遞員來測試):

授權承載訪問令牌這裏

在註冊外部網絡電話時,您需要提供一封電子郵件,我想將它與Facebook登錄關聯。

,那麼你需要重新做外部登錄通話,你做的第一時間(鏈接來自何處獲得外部登錄)

這次返回的訪問令牌將是本地訪問令牌,而不是Facebook的外部訪問令牌,這個令牌可以用來調用你的asp.net api,把它作爲「授權」添加到http請求頭中,就像我解釋的一樣。

編輯: 對您所嘗試這種壞的請求: 去ApplicationOAuthProvider類,然後ValidateClientRedirectUri方法,更改方法代碼:

if (context.ClientId == _publicClientId) 
{ 
    Uri expectedRootUri = new Uri(context.Request.Uri, "/"); 

    if (context.RedirectUri.StartsWith(expectedRootUri.AbsoluteUri)) 
    { 
     context.Validated(); 
    } 
} 

return Task.FromResult<object>(null); 
+0

是的,差不多完成了,現在的問題是,當我嘗試再次調用外部登錄,GET/api/Account/ExternalLogin?provider = Facebook&response_type = token&client_id = self&redirect_uri = http%3A%2F%2Flocalhost%3A15359%2F&state = QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1'我得到400錯誤的錯誤請求。哪裏不對? – BrunoRamalho

+0

我不確定你的問題是什麼,我需要更多的代碼和錯誤日誌,如果你嘗試使用郵遞員,並且看到錯誤或調試以查看錯誤,那將會更有益處。然而,有些東西我想你試着讓我知道它是否有效。我將編輯我的答案以添加更改。 – RaniDevpr

+0

它現在有效,忘記設置令牌 – BrunoRamalho