我使用ASP.NET Core MVC 2.2开发了一个Web应用程序,我想通过Facebook和Google身份验证/登录从用户那里获取更多信息。
实际上,通过facebook和google进行身份验证是可行的,但是请给我一些有关用户名的信息。我需要出生日期和用户个人资料图片。我该怎么办?
当我尝试进行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");
});
答案 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身份验证时,仍然不会为您检索生日。