如何在 AspNet.Identity 版本 3 / ASP.Net MVC6 / VNext 中检索 FacebookAccessToken?

How do I retrieve the FacebookAccessToken in the AspNet.Identity version 3 / ASP.Net MVC6 / VNext?

以前,我可以调用 info.ExternalIdentity.FindAll("FacebookAccessToken").

在 AspNet.Identity 版本 3 中,我无法使用 SignInManager 找到存储在任何地方的访问令牌。我也不能再使用 ExternalIdentity 中的 FindAll。

我还能在我的 ASP.Net MVC6 项目中检索 Facebook 访问令牌吗?

您可以通过将访问令牌包含在声明集合中来访问它。

您必须通过 FacebookAuthenticationNotifications OnAuthenticated 事件进入 Facebook 响应到 ClaimsIdentity 对象的映射。在 Startup.cs 文件中:

services.Configure<FacebookAuthenticationOptions>(options =>
{
    options.AppId = Configuration["Authentication:Facebook:AppId"];
    options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    options.Scope.Add("user_birthday");
    options.Notifications = new FacebookAuthenticationNotifications
    {
        OnAuthenticated = async context => {

            var accessToken = context.AccessToken;
            var identity = (System.Security.Claims.ClaimsIdentity)context.Principal.Identity;
            identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
        }
    };
});

然后您将能够在 ExternalIdentity 中找到访问令牌。