如何通过 Facebook 身份验证请求额外声明
How to request additional claims with Facebook authentication
我创建了一个新的 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";
});
...
}
一切正常,使用默认模板我可以 Register/Login 按预期进行。
当我通过 Facebook 登录时,系统会提供五条关于用户的默认声明信息:
- 名称标识符
- 电子邮件地址
- 名字
- 姓名
- 姓氏
我需要做的是扩展代码,使其比默认代码做得更多,并让我可以访问用户:
- phone个数
- 地址
- 邮政编码
(显然已征得用户同意)
我一直在阅读文档 (https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins?view=aspnetcore-3.1),但它似乎更多地是关于配置身份验证提供程序,而不是额外的声明信息。
有人做过吗?也许这是不可能的?
提前感谢您的指点。
发件人:Persist additional claims and tokens from external providers in 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");
});
这将显示这样的详细信息 - 登录屏幕更多详细信息。
我创建了一个新的 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";
});
...
}
一切正常,使用默认模板我可以 Register/Login 按预期进行。
当我通过 Facebook 登录时,系统会提供五条关于用户的默认声明信息:
- 名称标识符
- 电子邮件地址
- 名字
- 姓名
- 姓氏
我需要做的是扩展代码,使其比默认代码做得更多,并让我可以访问用户:
- phone个数
- 地址
- 邮政编码
(显然已征得用户同意)
我一直在阅读文档 (https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/facebook-logins?view=aspnetcore-3.1),但它似乎更多地是关于配置身份验证提供程序,而不是额外的声明信息。
有人做过吗?也许这是不可能的?
提前感谢您的指点。
发件人:Persist additional claims and tokens from external providers in 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");
});
这将显示这样的详细信息 - 登录屏幕更多详细信息。