首页 > 解决方案 > .net core 2.2 facebook auth store access_token

问题描述

我在此处关注文档以在成功验证后保存 access_token,但我不知道它OnPostConfirmationAsync应该在我的项目中的哪个位置,我没有Account/ExternalLogin.cshtml.cs. 我还注意到AspNetUserTokens数据库中的表是空的(即使在成功登录之后)。

我不明白我应该如何进行身份验证?

Ps::我需要 access_token 来与 Facebook API 进行一些集成。Ps2:: 我使用的是 dotnet 2.2

    services.AddAuthentication()
        .AddFacebook(fbOption => {
            fbOption.AppId = Configuration["Authentication:Facebook:AppId"];
            fbOption.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
            fbOption.Fields.Add("name");
            fbOption.Fields.Add("email");
            fbOption.SaveTokens = true;
        });

标签: .net-coreasp.net-core-mvc

解决方案


看来您正在使用带有外部登录的 ASP.NET Core 身份。

ASP.NET Core 2.1 及更高版本提供 ASP.NET Core Identity 作为 Razor 类库。包含 Identity 的应用程序可以应用脚手架来选择性地添加 Identity Razor 类库 (RCL) 中包含的源代码。请参阅文档:ASP.NET Core 项目中的脚手架标识

将身份源文件脚手架到您的应用程序后,您可以找到ExternalLogin.cshtml.cs里面的Areas/Identity/Pages/Account文件夹,然后您可以修改OnPostConfirmationAsync以将令牌添加到 cookie

不要忘记修改OnGetCallbackAsync功能:

if (result.Succeeded)
{

    // Store the access token and resign in so the token is included in
    // in the cookie
    var user = await _userManager.FindByLoginAsync(info.LoginProvider,
        info.ProviderKey);

    var props = new AuthenticationProperties();
    props.StoreTokens(info.AuthenticationTokens);

    await _signInManager.SignInAsync(user, props, info.LoginProvider);


    _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
    return LocalRedirect(returnUrl);
}

用户登录后,您可以通过以下方式获取控制器中的访问令牌:

var accessToken = HttpContext.GetTokenAsync("access_token").Result;

推荐阅读