Как лучше получить фото профиля при авторизации через Keycloak с помощью OAuth?
По вводным: есть установленный и настроенный keycloak на основеЭтогоПо вводным: образа, с поддержкой русских сервисов типа VK, Яндекс и т.п.
По вводным: в VK ID и Яндекс создал приложения, связал их со своим keycloak, настроил чтобы при авторизации получать инфу пользователя + фото пользователя.
По вводным: в настройках реалма keycloak добавил в профиль пользователя атрибут picture, который может содержать ссылку на картинку.
Нужно понять: и никак не могу нагуглить как сделать так, чтобы этот атрибут заполнялся автоматически при логине через VK или Яндекс. Кто-то решал такую задачу?
Сейчас ситуация такая: дополнение. Добавил авторизацию через Google и по инструкции сделал сопоставление параметра picture с атрибутом юзера picture. И фотка из аккаунта гугла подтянулась. А вот с ВК и Яндекс не работает. Возможно поле в токене называется как-то по другому.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Фото профиля при авторизации через Keycloak можно получить только если оно есть в данных пользователя или приходит от внешнего identity provider. Сам Keycloak по умолчанию не гарантирует поле avatar/picture для каждого пользователя. Поэтому сначала нужно понять источник: локальный пользователь Keycloak, Google/GitHub/VK через broker или ваша кастомная user federation.
В OIDC стандартное поле для изображения —
picture. Если внешний провайдер отдаёт его, нужно настроить mapper в Keycloak, чтобы claim попал в ID token или UserInfo. В клиенте затем читаете claim из token/userinfo.Проверьте UserInfo endpoint:
curl -H "Authorization: Bearer ACCESS_TOKEN" https://keycloak.example.com/realms/myrealm/protocol/openid-connect/userinfo
Если в ответе нет
picture, фронтенд не сможет получить фото “сам”. Нужно настроить mapper. В админке Keycloak: Client scopes или Identity Provider mappers → добавить mapping внешнего атрибута в claimpicture. Для Google обычно источник может называтьсяpicture, для других провайдеров — иначе.Если пользователи локальные, можно завести кастомный атрибут, например
avatar_url, и маппить его в token какpicture. Но хранить сами изображения в Keycloak обычно не стоит. Лучше хранить URL в вашем приложении или отдельном профиле пользователя.На стороне приложения не полагайтесь, что фото всегда есть. Делайте fallback: инициалы, стандартная аватарка, gravatar или генерация цвета по user id. Также не отдавайте service account или admin API на клиент ради получения аватарки — это небезопасно.
Итог: получите
pictureчерез UserInfo/token mapper. Если claim пустой, настраивайте mapper у identity provider или храните URL аватарки в кастомном атрибуте пользователя. Клиент должен уметь работать без картинки.