簡體   English   中英

Microsoft.Owin.Security.Facebook:無法訪問Facebook令牌

[英]Microsoft.Owin.Security.Facebook : Unable to reach facebook tokenEndpoint

我正在嘗試在asp.net Web api2項目中使用facebook進行外部身份驗證。

我使用的Microsoft.Owin.Security.Facebook軟件包的版本為3.0.1。

這些步驟可以正常工作:

  • 重定向到外部登錄的登錄Facebook表單
  • 后端API的Facebook回調,帶有授權代碼(facebook登錄成功)

之后,中間件應調用facebook tokenEndpoint https://graph.facebook.com/oauth/access_token以獲得訪問令牌。

但是我得到了一個socketException: 連接嘗試失敗,因為一段時間后連接方未正確響應,或者建立的連接失敗

因此,我嘗試在控制台應用程序中模擬對facebook tokenEndpoint(使用HttpClient.GetAsync )的調用。 我收到了代理錯誤,可以通過在WebRequestHandler指定代理來解決:

var proxy = WebRequest.DefaultWebProxy;
proxy.Credentials = CredentialCache.DefaultCredentials;

HttpClient httpclient = new HttpClient(new WebRequestHandler { Proxy = proxy });

//GetAsync OK with the use of the current system proxy
var result = RunSync(() => httpclient.GetAsync("https://graph.facebook.com/oauth/access_token"));

最后,我在應用程序的FacebookAuthenticationOptions中報告了代理設置,但錯誤仍然存​​在。

我不知道為什么該呼叫在控制台應用程序中起作用,但在Web應用程序中卻不起作用。 我試圖比較兩個應用程序之間的HttpClient狀態,但發現不多。

有人知道問題的根源可能是什么嗎?

盡管在app.config或web.config中都沒有聲明代理,但WebRequest.DefaultWebProxy的行為在控制台應用程序和Web應用程序之間並不相同。

我在msdn中讀到,如果在應用程序配置中找不到代理,則WebRequest.DefaultWebProxy將使用系統默認代理。

控制台應用程序就是這種情況,而Web應用程序則不是。 要在Web應用程序中使用系統代理,我必須專門使用WebRequest.GetSystemWebProxy()

這就解決了我開發環境中對facebook tokenEndpoint的訪問。

我不知道WebRequest.DefaultWebProxy在我的Web應用程序中返回的代理來自何處。

暫無
暫無

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

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