Facebook OAuth突然停止工作

use*_*707 12 model-view-controller facebook oauth facebook-graph-api owin

我昨天注意到我的网站登录已停止工作.

在过去的两个月里,这一直很有效,据我所知,我没有改变任何东西.我已尝试过以下链接,例如: - 以及更多......

ASP.NET MVC5 OWIN Facebook身份验证突然无法正常工作

我注意到Stack Overflow Facebook auth也停止了工作.

有没有人注意到这一点并找到了解决办法?值得注意的是我正在使用azure app服务来托管.但是当我使用localhost时也会发现这个问题.

我目前的设置看起来像这样......

在Startup.Auth.cs中

var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
{
    AppId = "xxxxxxxxxxxxx",
    AppSecret = "xxxxxxxxxxxx"
};
facebookOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookOptions);
Run Code Online (Sandbox Code Playgroud)

在下面的方法,loginInfonull每一次.

[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    if (loginInfo == null)
    {
        return RedirectToAction("Login");
    }
Run Code Online (Sandbox Code Playgroud)

我还从一个不同的帖子建议中添加了一个"WAKEUP"会话,fb auth之前失败了一次,这次修复了这个问题,但它已经回来了.

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
    Session["WAKEUP"] = "NOW!";

    // Request a redirect to the external login provider
    return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*ehl 13

正如RockSheep解释的那样.Facebook放弃了对API v2.2的支持.您需要更新您的OWIN nuget包.

你可以在github上找到这个问题(来自Katanaproject).

确保在nuget管理器中激活预发布版本,而不是将nuget软件包更新到版本v3.1.0-rc1.但要注意:更新后,您需要仔细测试您的登录信息(也许您还有其他身份验证提供程序,如Microsoft或Google,您也应该对其进行测试).

技术

Api将版本号更改为v2.8,API的返回值现在为JSON格式,不再在URI中进行转义.'旧'OWIN包无法处理此更改.

[Oauth访问令牌]格式 - 当您交换access_token的代码时返回的https://www.facebook.com/v2.3/oauth/access_token的响应格式 现在返回有效的JSON而不是URL编码.此回复的新格式为{"access_token":{TOKEN},"token_type":{TYPE},"expires_in":{TIME}}.我们使此更新符合RFC 6749的第5.1节.

在这里,您可以在GitHub上找到代码更改,以获得更多信息和更好的理解.


Roc*_*eep 5

很多人在昨天之后开始遇到麻烦.这是由于Facebook放弃了对其API的v2.2的支持.由于某种原因,他们的系统仍然将不使用版本号的auth调用重定向到2.2 API.quickfix是为了确保API版本随API调用一起发送.

从v2.3开始,Facebook也开始返回JSON对象.因此,请务必在代码中更改它.