Facebook身份验证:调用https://graph.facebook.com/oauth/access_token返回400错误请求

Cod*_*oad 2 .net model-view-controller facebook oauth facebook-login

尝试在mvc Web应用程序中实现facebook身份验证.

在localhost中,一切都按预期工作.在测试服务器中,我明白了

调用时有400个错误请求

https://graph.facebook.com/oauth/access_token?client_id=xxx&redirect_uri = xxx&client_secret = xxx&code = xxx

我正在使用我从这里获得的FacebookScopedClient类

Cod*_*oad 6

解决了.Facebook返回400个错误请求,因为它希望redirect_uri 参数在调用两者时都相同

https://www.facebook.com/dialog/oauthhttps://graph.facebook.com/oauth/access_token

我正在使用FacebookScopedClient浮动在网上的类的变体.

它设置的值redirect_uri来自:context.Request.Url.OriginalString;

该字符串包含端口号,而原始URL不包含端口号.

解决方案是在第一次调用中包含端口号,从第二次调用中删除它,或者从第一次调用中获取redirect_uriRequest.Url.

我使用第二个选项,使用:

  if (context.Request.Url.IsDefaultPort)
            {
                rawUrl = rawUrl.Replace(":80", ""); //patch to remove port number. 
            }
Run Code Online (Sandbox Code Playgroud)

它可能不是防弹,因为可能有一个奇怪的情况,":80"出现在网址的其他地方,但它对我的需求是足够的.