Microsoft.Owin.Security.Facebook:无法访问facebook tokenEndpoint

时间:2016-04-08 10:15:48

标签: c# asp.net facebook owin

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

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

这些步骤很好:

  • 重定向到外部登录的登录Facebook表单
  • facebook回调到后端api,授权码(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状态,但我发现并不多。

是否有人知道问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

WebRequest.DefaultWebProxy的行为在我的控制台应用程序和我的Web应用程序之间并不相同,尽管在app.config或web.config中没有声明代理。

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

控制台应用程序就是这种情况,但Web应用程序则不然。 要在Web应用程序中使用系统代理,我必须专门使用WebRequest.GetSystemWebProxy()

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

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