Facebook graph api ASP.NET WebApi身份Facebook登录访问被拒绝

Facebook graph api ASP.NET WebApi身份Facebook登录访问被拒绝,facebook-graph-api,asp.net-web-api,asp.net-identity,facebook-login,asp.net-identity-2,Facebook Graph Api,Asp.net Web Api,Asp.net Identity,Facebook Login,Asp.net Identity 2,我正在构建一个ASP.NET(4.6)WebApi项目,我正在使用ASP.NET身份向Facebook、Google和Microsoft验证我的API。我已经设法通过谷歌和微软的认证,但没有通过Facebook。 我正在使用Visual Studio 2015 问题是每次我进行身份验证时都会被拒绝访问。场景如下所示: 我通过浏览器调用localhost:2975/API/Account/ExternalLogins?returnUrl=%2F&generateState=true 对于我的API

我正在构建一个ASP.NET(4.6)WebApi项目,我正在使用ASP.NET身份向Facebook、Google和Microsoft验证我的API。我已经设法通过谷歌和微软的认证,但没有通过Facebook。 我正在使用Visual Studio 2015

问题是每次我进行身份验证时都会被拒绝访问。场景如下所示:

  • 我通过浏览器调用localhost:2975/API/Account/ExternalLogins?returnUrl=%2F&generateState=true
  • 对于我的API支持的每个外部提供者,我都会收到一个指向我的API的链接。在Facebook的例子中,我得到了localhost:2975/api/Account/ExternalLogin?provider=Facebook&response\u type=token&client\u id=self&redirect\u uri=http%3A%2F%2Flocalhost%3A2975%2F&state=99…01
  • 我使用浏览器进入该链接,并被重定向到Facebook登录页面
  • 我通过了Facebook的身份验证,出现了一个对话框窗口,请求获得有关我的信息
  • 我接受并被重定向回API,错误为“拒绝访问”。调用localhost:2975/api/Account/ExternalLogin
  • 我还没有弄清楚问题来自何处,无论是我的Facebook应用程序中的某些权限设置,还是我登录的Facebook用户,或者问题是否存在于ASP.NET身份模板中

    关于Facebook,我为我的应用程序创建了一个测试应用程序,并将其作为一个实时应用程序推送。我可以在我的Facebook个人资料中找到这个应用程序,我已经删除了好几次。我的Facebook个人资料具有应用程序的管理员角色。我创建了测试用户,并添加了一个朋友作为应用程序的开发人员/测试人员。问题依然存在。我在某个地方读到,应该有一个待决的应用程序请求,我应该接受,但我没有找到任何

    关于ASP.NET标识模板,在过程中很早就收到错误:

    AccountController.cs:

    public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
    {
        if (error != null)
        {
            // This is where the API comes in step 5 above
            return Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error)); 
        }
    
        if (!User.Identity.IsAuthenticated)
        {
            // This is where the API comes in step 2 above before it redirects me to Facebook login 
            return new ChallengeResult(provider, this); 
        }
    
        ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
    
        // Untouched logic
        // ....
    }
    
    感觉我什么都试过了。有没有办法解决这个问题

    提前谢谢

    来自队列中的post

    context.Identity.AddClaim(new Claim("urn:facebook:email", context.Email, ClaimValueTypes.Email, "Facebook"));
    

    context.Email为空。

    尝试更新nuget软件包,Microsoft.Owin.Security、Microsoft.Owin.Security.Facebook等更新nuget软件包解决了我的问题。

    对于那些无法通过更新
    nuget
    软件包来解决问题的人,这可能会有所帮助

    我们的
    Web应用程序
    在外部登录时工作正常,之前我们的应用程序将用户重定向到
    Facebook
    Google
    进行身份验证,并从他们的帐户返回相关详细信息。但是出现了这个问题,重定向url包含一个值为
    Access\u Denied
    的错误。这根本不是描述性的,因此您需要手动查找错误

    经过大量调试和更新后,我仍然无法解决这个问题,后来发现解决方案是服务器的IP
    whitelisting
    ,因为我们的it团队和少数开发人员更改了服务器设置或将网站迁移到新服务器,而新服务器显然具有不同的
    IP
    。因此,我将Facebook开发控制台中的IP地址添加到了
    白名单
    地址中,效果非常好


    然而,谷歌认证是固定的,没有任何白名单,只是更新了
    nuget
    包就完成了任务。

    更新晚:我的代码没有问题。在我更改了Facebook应用程序中的一些设置后,它起作用了。你能告诉我们你在Facebook网站上对它起作用的地方做了哪些更改吗?我对这些设置也很好奇……这是为我做的!默认模板包括v3.0.1。我将该软件包更新为v3.1.0,它运行正常。
    context.Identity.AddClaim(new Claim("urn:facebook:email", context.Email, ClaimValueTypes.Email, "Facebook"));