ASP.NET MVC 5(VS2013决赛):使用OWIN登录Facebook失败(loginInfo为空)



我安装了昨天发布的VS2013最终位,我正在尝试一个启用外部Facebook登录的示例。我的第一个问题:

在此控制器代码中(我没有触摸它,而是按原样离开示例模板):

    //
    // GET: /Account/ExternalLoginCallback
    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
        if (loginInfo == null)
        {
            return RedirectToAction("Login");
        }

我在等待 AuthenticationManager.GetExternalLoginInfoAsync() 的行上设置了一个断点。代码返回(在我登录Facebook之后),并且"loginInfo"为空。在 UI 中,登录页面将继续显示,没有变化。我该如何调试?我试图在GetExternalLoginInfoAsync()中找到代码,但根据这个线程:

Microsoft.AspNet.Identity.Owin.AuthenticationManager 在 Asp.Net Identity RTM 版本中在哪里?

AuthenticationManager 现在消失了。(上述情况似乎并非如此。

我的第二个问题:是否有其他人能够在不更改 ASP.NET MVC5 示例代码的情况下使用 Facebook 登录来获取示例(除了取消注释应用程序。使用Facebook身份验证并填写您的FB应用程序详细信息)?(您必须使用 Facebook 配置别名主机,例如"localtest.me",并使用 IIS Express 对其进行配置。

感谢您的任何帮助...

-本

我在向Google进行身份验证时遇到了这个问题(OpenID,而不是OAuth)。所以真的没有什么可搞砸的,但可以肯定的是,在围绕会话变量进行一些简单的代码更改后,它停止了工作。使用提琴手,我确定谷歌确实返回了有效信息。

比我聪明的人发现了我的问题并在此处描述了修复程序。

ASP.NET_SessionId + OWIN Cookie 不会发送到浏览器

我所要做的就是将Session["salt"] = "salt";添加到帐户/登录控制器中,然后中提琴神奇地开始完美运行。不确定这是否是你的确切问题,但这是我的问题。

好吧,这对我来说很愚蠢。首先,我开始使用Fiddler进行调试,并看到Facebook发回了以下内容:

WWW-身份验证:OAuth "Facebook 平台" "invalid_request" "请求无效,因为应用机密与客户端令牌相同"

此消息不准确,但搜索它时,我发现了另一个线程,其中用户指定重置应用程序机密解决了问题。(我已经很久没有使用这个应用程序了,所以这可能是相关的。所以我采取了这些步骤,但仍然看到了问题所在。但《提琴手》中的信息发生了变化:

WWW-身份验证:OAuth "Facebook 平台" "invalid_request" "请求无效,因为应用程序已配置为桌面应用程序"

事实上,该应用程序在Facebook中配置错误。我将其设置为Web应用程序,现在它可以完美运行!希望这可以帮助其他人,因为直到解雇Fiddler才清楚这一点。

> 我开始在最新的VS 2013.3模板中得到这个,并意识到身份验证不能很好地与我从其他项目之一移植的FormsAuthentication一起使用。这是我为修复它所做的:

添加了<system.web><authentication mode="None" />...

添加了<system.webServer><modules><remove name="FormsAuthentication" /></modules>...

对我来说,

这失败了,因为我认为Facebook总是可以访问生日财产,但事实并非如此:

// facebook doesn't guarantee that this value exists always,
// thus we can't really add this claim to our identity object, if it's null.
var birthday = context.User.Value<string>("birthday");
if (birthday != null)
{
    context.Identity.AddClaim(new Claim("Birthdate",
         context.User.Value<string>("birthday")));
}

这几乎扩展到所有内容:

1)某些用户没有姓氏(允许)

2)某些用户在FB中没有电子邮件(允许)

3)有些用户没有给出生日,

你必须照顾好一切。

我将microsoft.security.owin.facebook引用添加到项目fron NuGet包管理器中,它开始正常工作。

我遇到了同样的问题,因为我没有在谷歌中启用API。Fiddler 返回的错误状态为 access_denied。

我已经创建了项目并获得了客户端 ID 和机密数据,但您还需要转到开发人员控制台并启用 Google+ API。

最后我

找到了身份验证失败OWIN答案。 我真的很想知道当我尝试添加 Facebook 身份验证时我的ASP.NET MVC 5应用程序发生了什么。在我尝试了互联网上的所有解决方案之后。

只需使用新的Facebook开发人员应用程序更改您的Facebook应用程序

,或者从Facebook开发人员网站更改其应用程序秘密。

我可以看到Fiddler中的所有内容都在使用填充loginInfo所需的信息,但仍然从GetExternalLoginInfoAsnyc返回空。

当我在 Startup.Auth 中将以下行添加到 ConfigureAuth 方法时,loginInfo 不再为空。

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

最新更新