如何通过 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 登录时,系统会提供五条关于用户的默认声明信息:

我需要做的是扩展代码,使其比默认代码做得更多,并让我可以访问用户:

(显然已征得用户同意)

我一直在阅读文档 (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");
});

这将显示这样的详细信息 - 登录屏幕更多详细信息。