.net-core - .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;
});
解决方案
看来您正在使用带有外部登录的 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;
推荐阅读
- docker - 在运行时使用 docker 设置 vueJS 环境变量
- php - 我无法访问我在 Laravel 中的第二个数据库(.env 和 database.php 已编辑!)
- php - 并行 php 进程
- javascript - Javascript 中的 RSA-OAEP 加密和 Java 中的解密
- c# - Azure WebJob 部署问题
- c++ - 使用 Qt/QML 从图像中获取某些像素及其坐标
- python - 如果指定列不为空,则重复列元素
- asp.net - IdentityServer 4 中的 CORS 问题
- php - Laravel:如何从城市名称中获取纬度和经度点?
- scala - 使用scala获取kafka主题名称