0

Я использую identityserver4 с Net Core. Я могу аутентифицироваться с помощью Google, Facebook, Twitter, LinkedIn и Microsoft, но теперь я хотел бы получить профиль профиля пользователя для внешнего провайдера. Я использую клиент с GrantTypes.Implicit и попытался добавить новый IdentityResource следующим образом:Как получить изображения профиля из внешних поставщиков с помощью identityserver4?

new IdentityResource { 
    Name = "picture", 
    UserClaims = new List<string> {"picture" } 
} 

Затем я добавил «картину» в качестве разрешенного объема для моего клиента. Это все выстрел в темноте, хотя я все еще пытаюсь обернуть голову ресурсами идентификации и разрешенными областями.

Поскольку я очень новичок в Identity Server4, будьте добры и по возможности детализированы. Заранее спасибо!

ответ

0

В ресурсах идентификации должно быть «область», называемая «профилем», имеющей набор пользовательских заявок, одним из которых является «изображение».

Поскольку вы используете идентификатор 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 
      } 
     }); 
+0

У меня есть добавленный ресурс «профиля» и вы можете получить имя пользователя, адрес электронной почты и URL-адрес профиля, но не можете получить изображение. Он не включен в претензии от Google. В моем методе ExternalLoginCallback у меня есть следующее: 'var email = info.Principal.FindFirstValue (ClaimTypes.Email); var picture = info.Principal.FindFirstValue («картинка»); ' Электронная почта возвращается, но не изображение. – 206mph

+0

info.Principal.Claims.Where (x => x.Type == "picture"). Выберите (x => x.Value) .FirstOrDefault() –

+0

То же самое, что и при использовании FindFirstValue. К сожалению, претензии не содержат изображения. Я не уверен, почему бы и нет. Нужно ли мне что-либо делать с объектом GoogleOptions, чтобы сообщить Google о включении картинки? Я думал, что «новый IdentityResources.Profile()» в списке идентификационных ресурсов - это все, что необходимо, но, по-видимому, нет. – 206mph

Смежные вопросы