Заполнение аватаров пользователей с помощью Microsoft Graph OAuth2

Привет, друзья из Discourse,

Я использовал discourse-oauth2-basic, чтобы позволить нашим участникам входить в систему и автоматически заполнять значения электронной почты, полного имени и имени пользователя из их организационной учётной записи Office365. Однако у меня возникают трудности с заполнением аватара, и я хотел бы узнать, добился ли кто-нибудь успеха в этом?

В рекомендациях по Graph здесь указывается, что URL для аватара должен быть доступен по адресу photo/$value; я указал его, но данные не возвращаются, и в логах я не вижу никаких ошибок.

Мои текущие настройки:

…Я также пробовал добавить ‘photo’ в поля oauth2 callback user info paths и oauth2 authorize options, но безрезультатно. Любая помощь будет очень кстати :wink:

Плагин OAuth2 позволяет запрашивать данные только с одной конечной точки (URL-адрес JSON-данных пользователя OAuth2). Все настройки json *** path относятся к местоположениям внутри JSON-данных, а не к отдельным конечным точкам API.

Краткий обзор документации по API graph.microsoft.com показывает, что конечная точка /me по умолчанию не включает URL-адрес аватара. Даже если вы сможете получить ресурс profilePhoto, похоже, он возвращает «идентификатор фотографии», а не URL-адрес.

К сожалению, думаю, вам потребуется разработать собственный плагин аутентификации, чтобы это работало :cry:. Но я буду рад, если ошибаюсь!

Спасибо, что проверили это, @david. Это побудило меня посмотреть, можно ли «получить» его в пользовательский JSON. Похоже, что параметр запроса расширения OData не поддерживается для фотографии, хотя она и возвращается в виде URL, если добавить к нему /$value:

…вы не можете использовать $expand для связи user/photo.

Мне не удалось найти способ это обойти; поэтому вместо https://graph.microsoft.com/beta/me?$expand=photo я пытался что-то вроде https://graph.microsoft.com/beta/me/photo/$value?$expand=mail,displayName. Раздражение, бросание игрушек из кроватки, жалобы.

Возможно, мы могли бы использовать поле «mail» в данных JSON для построения URL-адреса фотографии, который всегда имеет вид:

https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/adam_pope_arup_com_LThumb.jpg

..так что можно ли конкатенировать три элемента в поле с правильным синтаксисом? Моя попытка, к сожалению, не сработала:

https://tenant-my.sharepoint.com/User%20Photos/Profile%20Pictures/” & mail & “_LThumb.jpg”

…или, возможно, другой способ — я явно хватаюсь за соломинку — заключался бы в добавлении конечной точки фотографии к полю URL oauth2 user json с чем-то вроде:

https://graph.microsoft.com/v1.0/me?https://graph.microsoft.com/v1.0/me/photo