c# - 如何通过 Facebook 身份验证请求额外声明
问题描述
我创建了一个新的 ASP.net Core 3.0 网站,带有来自 .net 项目模板的个人用户身份验证。
我通过直接在网站上注册或使用 facebook 来存储用户。这是我的Startup.cs
样子:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options => {
// This determines user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options => {
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
});
services.AddAuthentication()
//.AddMicrosoftAccount(microsoftOptions => { })
//.AddGoogle(googleOptions => { })
//.AddTwitter(twitterOptions => { })
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = "x";
facebookOptions.AppSecret = "y";
});
...
}
这一切都很好,使用默认模板我可以按预期注册/登录。
当我通过 Facebook 登录时,我会收到关于用户的五项默认声明信息:
- 名称标识符
- 电子邮件地址
- 给定的名称
- 姓名
- 姓
我需要做的是扩展代码,使它比默认的更多,并让我可以访问用户:
- 电话号码
- 地址
- 邮政编码
(显然在用户同意的情况下)
我一直在阅读文档(https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins?view=aspnetcore-3.1),但似乎更多的是关于配置身份验证提供程序而不是其他声明信息。
有人做过吗?也许这是不可能的?
感谢您提前提供任何指示。
解决方案
来自:在 ASP.NET Core 中保留来自外部提供程序的附加声明和令牌- 如果应用需要附加范围,请将它们添加到选项中。例如,在 Facebook 中,您可以像这样添加范围。
services.AddAuthentication().AddFacebook(facebookOptions =>
{
facebookOptions.AppId = "4387237897237";
facebookOptions.AppSecret = "23498423808320849082308";
facebookOptions.Scope.Add("email");
facebookOptions.Scope.Add("user_location");
facebookOptions.Scope.Add("user_birthday");
});
这将显示这样的详细信息 - 登录屏幕更多详细信息。
推荐阅读
- c++ - CUDA设备功能多重定义
- php - Symfony 4:尝试获取 / 时重定向到 /admin
- selenium - 使用 Python 和哪个工具实现 Flash 应用程序自动化
- postgresql - PSQLException:错误:列“attidentity”不存在
- python - dict.pop() 报异常keyerror
- git - Git - 在允许推送到分支之前需要合并来自 master 的提交
- android - Android 仪器测试在加载本机库时擦除共享首选项数据
- javascript - jQuery-confirm 防止在 callerElement.hide() 上滚动
- c# - 如何从具有配置的库中注册 api 控制器
- java - 在java中具有两个比较的空安全比较器