В ресурсах идентификации должно быть «область», называемая «профилем», имеющей набор пользовательских заявок, одним из которых является «изображение».
Поскольку вы используете идентификатор ASP.NET, вам необходимо вставить запись для любого данного пользователя в таблицу AspNetUserClaims с типом претензии «картинка», где это значение является URL-адресом онлайн-изображения.
Клиенты, которым предоставлен объем «профиля», должны получить эту претензию «изображение», когда они обращаются к конечной точке UserInfo.
Если вы хотите сделать это изображение как часть id_token, вам нужно добавить заявку «picture» на область/ресурс openid в дополнение к области/ресурсу профиля.
(Термины сфера и ресурс сливаются немного в модели данных идентификации сервера.)
-
Чтобы получить иск изображения от Google вы можете сделать это:
info.Principal.Claims.Where(x => x.Type == "picture").Select(x => x.Value).FirstOrDefault()
-
При использовании Microsoft.AspNetCore.Authentication.Google, то есть app.UseGoogleAuthentication(google.Options(externalCookieScheme)
, Google не отправляет заявку на изображение.
Если вы переключитесь на использование метода OIDC, Google отправит вам заявку на изображение.
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc-google",
DisplayName = "Google",
Authority = "https://accounts.google.com",
ClientId = "",
ClientSecret = "",
Scope = { "profile", "email", "openid" },
CallbackPath = "signin-google",
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role",
ValidateIssuer = false
}
});
У меня есть добавленный ресурс «профиля» и вы можете получить имя пользователя, адрес электронной почты и URL-адрес профиля, но не можете получить изображение. Он не включен в претензии от Google. В моем методе ExternalLoginCallback у меня есть следующее: 'var email = info.Principal.FindFirstValue (ClaimTypes.Email); var picture = info.Principal.FindFirstValue («картинка»); ' Электронная почта возвращается, но не изображение. – 206mph
info.Principal.Claims.Where (x => x.Type == "picture"). Выберите (x => x.Value) .FirstOrDefault() –
То же самое, что и при использовании FindFirstValue. К сожалению, претензии не содержат изображения. Я не уверен, почему бы и нет. Нужно ли мне что-либо делать с объектом GoogleOptions, чтобы сообщить Google о включении картинки? Я думал, что «новый IdentityResources.Profile()» в списке идентификационных ресурсов - это все, что необходимо, но, по-видимому, нет. – 206mph