首页 > 解决方案 > 如何通过 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),但似乎更多的是关于配置身份验证提供程序而不是其他声明信息。

有人做过吗?也许这是不可能的?

感谢您提前提供任何指示。

标签: c#authenticationasp.net-coreasp.net-identityfacebook-login

解决方案


来自:在 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");
});

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

Facebook 身份验证对话框


推荐阅读