11

我安装了昨天发布的 VS2013 最终版本,并且我试图让一个示例在我启用外部 Facebook 登录的情况下工作。我的第一个问题:

在这个控制器代码中(我没有触摸它,而是从示例模板中保留下来):

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

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

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

AuthenticationManager 现在不见了。(上述情况似乎并非如此。)

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

谢谢你的帮助...

-本

4

8 回答 8

14

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

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

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

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

于 2014-01-29T18:43:49.807 回答
4

好吧,这对我来说很愚蠢。首先,我开始使用 Fiddler 进行调试,然后看到 Facebook 发回了这个:

WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "请求无效,因为应用程序密钥与客户端令牌相同"

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

WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "请求无效,因为应用程序被配置为桌面应用程序"

事实上,该应用程序在 Facebook 中配置错误。我将它设置为一个网络应用程序,它现在可以完美运行了!希望这可以帮助其他人,因为这在启动 Fiddler 之前还不清楚。

于 2013-10-18T16:14:47.200 回答
2

对我来说,这失败了,因为我认为 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)有些用户不送生日,

你必须照顾好一切。

于 2015-04-27T14:38:45.433 回答
2

我开始在最新的 VS 2013.3 模板中获得此功能,并意识到身份验证与我不必要地从我的其他项目之一移植的 FormsAuthentication 配合得不好。这是我为修复它所做的:

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

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

于 2014-08-30T00:44:34.963 回答
1

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

于 2017-05-20T18:39:35.583 回答
0

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

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

于 2016-06-01T18:04:56.003 回答
-1

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

只需使用新的 Facebook 开发者应用程序更改您的 Facebook 应用程序或从 Facebook 开发者网站更改其应用程序秘密。

于 2014-08-26T08:02:08.220 回答
-1

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

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

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
于 2015-05-07T21:02:55.147 回答