ASP.NET Core MVC 2.2中Facebook和Google身份验证的其他字段

时间:2019-03-12 07:49:52

标签: asp.net-core-mvc google-authentication facebook-authentication asp.net-core-2.2

我使用ASP.NET Core MVC 2.2开发了一个Web应用程序,我想通过Facebook和Google身份验证/登录从用户那里获取更多信息。

实际上,通过facebook和google进行身份验证是可行的,但是请给我一些有关用户名的信息。我需要出生日期和用户个人资料图片。我该怎么办?

当我尝试进行facebook身份验证时,我将重定向到以下URL:https://www.facebook.com/v3.1/dialog/oauth?client_id=2255814967787552&scope=email,https%3A%2F%2Fwww.facebook.com%2Fdialog%2Foauth&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%3A44381%2Fsignin-facebook&state=CfDJ8D6zBetw7iFAjlSqmbgb4YDXGCqkP9eC0ywTHzwmmZ_KjSgwprhdP-TuZpZheevTP90ZlwtBXWr1DkVvsOJe842onEdxPxNMFuEz0yg8HtFZSvQwfFOT4E46EHkM7s0xWPh_VwFy6BQVvtDL7BrtBtTssvAuu7zdCcX7kgLAb6YWuAQUUSx6ocbcRwQVKd-Gg9bwBVmtyVQfFXVLJAMkbTEMsR4ajeibSM558iggvPIzct-SYu-hOu474PFDMmG9iB9JNkSytsXSRltjSrIT0clmbrahqQbmLL8Pa-IM33Gl

当我尝试进行Google身份验证时,它可以工作,但是外部登录信息主体中没有声明类型。

我不知道如何获取用户个人资料图像。

我的创业公司:

services.AddAuthentication()
    .AddFacebook(facebookOptions =>
        {
            facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
            facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
            facebookOptions.Scope.Add("https://www.facebook.com/dialog/oauth");
            facebookOptions.Fields.Add(ClaimTypes.GivenName);
            facebookOptions.Fields.Add(ClaimTypes.Surname);
            facebookOptions.Fields.Add(ClaimTypes.DateOfBirth);
            facebookOptions.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "givenname");
            facebookOptions.ClaimActions.MapJsonKey(ClaimTypes.Surname, "surname");
            facebookOptions.ClaimActions.MapJsonKey(ClaimTypes.DateOfBirth, "dateofbirth");
        })
    .AddGoogle(googleOptions =>
        {
            googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
            googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
            googleOptions.Scope.Add("https://www.googleapis.com/auth/plus.login");
            googleOptions.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "givenname");
            googleOptions.ClaimActions.MapJsonKey(ClaimTypes.Surname, "surname");
            googleOptions.ClaimActions.MapJsonKey(ClaimTypes.DateOfBirth, "dateofbirth");
        });

1 个答案:

答案 0 :(得分:0)

生日的范围是:https://www.googleapis.com/auth/user.birthday.read。您可以参考Google文档Here来获取所有google api所需的oauth2范围的列表。

但是请注意,为了获取生日的信息,您需要手动向Google People API发出授权请求(即:在授权标头中包含具有要求范围的baerer令牌),如{{ 3}}。这是因为AspNetCore for GoogleAuth的当前实现是从google UserInfo端点(Here)获取其身份验证声明,该端点根本不提供生日信息,即使是授权请求也是如此,因此只需将生日范围添加到{{1 }}在GoogleOptions.Scope方法中为您的应用配置Google身份验证时,仍然不会为您检索生日。