最近我也不得不访问谷歌个人资料的图片,这就是我解决它的方法......
如果您只是启用app.UseGoogleAuthentication();
Startup.Auth.cs 文件中的代码,这还不够,因为在这种情况下,Google 根本不会返回有关个人资料图片的任何信息(或者我不知道如何获取它)。
您真正需要的是使用 OAuth2 集成而不是默认启用的 Open ID。这就是我是如何做到的......
首先,您必须在 Google 端注册您的应用并获取“客户端 ID”和“客户端密码”。完成此操作后,您可以走得更远(稍后您将需要它)。如何在此处执行此操作的详细信息。
替换app.UseGoogleAuthentication();
为
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
ClientId = "<<CLIENT ID FROM GOOGLE>>",
ClientSecret = "<<CLIENT SECRET FROM GOOGLE>>",
CallbackPath = new PathString("/Account/ExternalGoogleLoginCallback"),
Provider = new GoogleOAuth2AuthenticationProvider() {
OnAuthenticated = async context =>
{
context.Identity.AddClaim(new Claim("picture", context.User.GetValue("picture").ToString()));
context.Identity.AddClaim(new Claim("profile", context.User.GetValue("profile").ToString()));
}
}
};
googleOAuth2AuthenticationOptions.Scope.Add("email");
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
之后,您可以使用代码以与访问任何其他属性相同的方式访问配置文件的图片 URL
var externalIdentity = HttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var pictureClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type.Equals("picture"));
var pictureUrl = pictureClaim.Value;