Microsoft.Owin.Security.Facebook:无法到达 facebook tokenEndpoint

Microsoft.Owin.Security.Facebook : Unable to reach facebook tokenEndpoint

我正在尝试在 asp.net web api2 项目中使用 facebook 实施外部身份验证。

我使用的Microsoft.Owin.Security.Facebook包的版本是3.0.1。

这些步骤工作得很好:

之后,中间件应该调用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 状态,但发现不多。

有人知道问题的原因吗?

WebRequest.DefaultWebProxy 的行为在我的控制台应用程序和我的 Web 应用程序之间是不一样的,尽管事实上在 app.config 或 web.config 中都没有声明代理.

我在msdn中看到,如果在应用程序配置中没有找到代理, WebRequest.DefaultWebProxy 将使用系统默认代理。

控制台应用程序属于这种情况,但 Web 应用程序并非如此。 要在 Web 应用程序中使用系统代理,我必须专门使用 WebRequest.GetSystemWebProxy().

那解决了在我的开发环境中访问 facebook tokenEndpoint 的问题。

我不知道 WebRequest.DefaultWebProxy 在我的网络应用程序中返回的代理来自哪里。