Asp.net mvc 使用外部承载令牌(MVC4 Web Api)登录Facebook

Asp.net mvc 使用外部承载令牌(MVC4 Web Api)登录Facebook,asp.net-mvc,authentication,asp.net-web-api,owin,Asp.net Mvc,Authentication,Asp.net Web Api,Owin,我正在尝试使用外部承载令牌实现facebook登录。我在VS 2013中创建了一个新项目,并选择了个人用户帐户身份验证,如本文所示 我配置了facebook身份验证: app.UseFacebookAuthentication( appId: "123[...]", appSecret: "123[...]"); 一切都很好 我的测试方法: [OverrideAuthentication] [HostAuthentication(DefaultA

我正在尝试使用外部承载令牌实现facebook登录。我在VS 2013中创建了一个新项目,并选择了个人用户帐户身份验证,如本文所示

我配置了facebook身份验证:

app.UseFacebookAuthentication(
            appId: "123[...]",
            appSecret: "123[...]");
一切都很好

我的测试方法:

[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
[Route("ExternalLogin2", Name = "ExternalLogin2")]
public async Task<IHttpActionResult> GetExternalLogin2()
{
    ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
    return Ok();
}
但我收到了401的结果


我必须如何通过外部承载令牌进行身份验证?

我尚未找到此问题的解决方案。但我用另一种方法解决了这个问题。我添加了HTTP头X-Facebook-Token并将其传递到那里。在OAuthAuthorizationServerProvider的重写方法GrantResourceOwnerCredentials(上下文)中,我从context.Request.Headers[“X-Facebook-token”]捕获了令牌

在FacebookUtil.TryGetUser()中,我使用了Facebook库


你从哪里获得facebook代币?@Neshta你在这里找到解决方案了吗?这里也有同样的问题。我有一个facebook令牌,但无法访问标记为外部承载的WebAPI方法。同样的问题。如果这个属性不起作用,我不明白它的意义是什么。显然我不是唯一一个。。。解决方案/解决方案需要为激活的尽可能多的提供程序执行手动API调用。。。听起来很乏味。这里有一些用于Facebook和Google的代码,但我真的希望这个属性能够起作用,这样验证代码就不必要了。如果有人已经解决了这个问题,我有一个关于这个问题的悬赏问题
GET http://localhost:17353/api/Account/ExternalLogin2 HTTP/1.1
Authorization: Bearer [my facebook token]
Content-Length: 28
Host: localhost:17353
string facebookToken = context.Request.Headers["X-Facebook-Token"];
if (facebookToken == null)
{
    context.SetError("invalid_grant", "Facebook token was not found in X-Facebook-Token header.");
    return;
}

dynamic facebookUser;
if (!FacebookUtil.TryGetUser(facebookToken, out facebookUser))
{
    context.SetError("invalid_grant", "Facebook token is incorrect.");
    return;
}
public static bool TryGetUser(string facebookToken, out dynamic user)
{
    var facebookClient = new FacebookClient(facebookToken)
    {
        AppId = AppSettings.FacebookAppId,
        AppSecret = AppSettings.FacebookAppSecret
    };

    try
    {
        user = facebookClient.Get("me");
        return true;
    }
    catch (Exception)
    {
        user = null;
        return false;
    }
}