Так, пытаемся использовать утверждение picture в нашем OIDC JWT, которое является URL-адресом хранилища изображений без дополнительной аутентификации. Мы используем Entra, поэтому обычно userinfo указывает на конечную точку Graph, и без добавления токена доступа запрос завершится ошибкой.
Изучив omniauth для oidc, я заметил, что поле picture добавляется к пользователю, поэтому начал экспериментировать с этим.
Сначала нам пришлось подделать документ обнаружения (discovery doc), чтобы удалить конечную точку userinfo. Это позволяет получить доступ к утверждениям JWT, а не только к тем, что находятся в userinfo. Это кажется работающим: судя по данным в таблице associated_user_accounts и подробным логам событий OIDC, утверждение picture проверяется и сохраняется.
В таблице uploads есть признаки того, что функция import_url_for_user, похоже, работает, но ссылка вида “user_avatar///.png” ведет в тупик.
Я пробовал менять настройки аватара в Discourse Connect и не думаю, что эта модель считается внешней системой, но всё равно попробовал. Также я добавил доменное имя сервера аватаров в список “внутренних хостов”, так как подозревали SSRF, но, похоже, дело не в этом. Для пользователей я вижу, что опция “Custom Picture” включена, но ссылка выглядит нерабочей, поэтому не уверен: пытается ли система что-то сделать, но не может завершить процесс.
У кого-нибудь уже был успех в использовании утверждений JWT для предоставления URL-адреса аватара? Может быть, вы сможете указать, чего мне не хватает? Есть ли какая-то отладка вокруг user_avatar, в которую можно погрузиться, чтобы пролить свет на ситуацию?