# JWT-утверждения вместо Userinfo в oidc-connect с Entra в качестве IdP

**URL:** https://meta.discourse.org/t/jwt-claims-instead-of-userinfo-in-oidc-connect-with-entra-as-idp/295389
**Category:** SSO
**Tags:** openid-connect
**Created:** [14.Февраль.2024 20:24:26 UTC](https://meta.discourse.org/t/jwt-claims-instead-of-userinfo-in-oidc-connect-with-entra-as-idp/295389 "2024-02-14T20:24:26Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![jrack](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jrack/32/326934_2.png) [@jrack](https://meta.discourse.org/u/jrack)
#### Post date: [14.Февраль.2024 20:24:27 UTC](https://meta.discourse.org/t/jwt-claims-instead-of-userinfo-in-oidc-connect-with-entra-as-idp/295389/1 "2024-02-14T20:24:27Z")

</div>

Проверяю, не упустил ли я что-то. Я знаю, что `download_avatar_url`, основанный на атрибуте `userinfo/picture`, не сработает, так как в этом запросе не передается токен доступа (для Entra это конечная точка `graph/me`). Добавление логики авторизации [в импортер](https://github.com/discourse/discourse/blob/main/script/import_scripts/phpbb3/importers/avatar_importer.rb#L71) кажется запутанным набором условных операторов и ненадежным решением.

У меня есть анонимная конечная точка для аватаров, которая может работать (проверено с использованием замены по внешнему URL и имени пользователя).

Обычно я бы обрабатывал подобные вещи с помощью необязательных утверждений (claims) в Entra, и приложение сопоставляло бы эти утверждения с правильными полями на своей стороне. Я могу это успешно сделать и увидеть правильно отформатированный JWT с утверждениями в подробном логе OIDC. Однако стандартный поток предполагает использование `access_token` для получения данных пользователя (`userinfo`), что я не могу добавить или изменить, а остальные утверждения отбрасываются.

Я заметил, что если [конечная точка `userinfo_endpoint` не определена](https://github.com/discourse/discourse-openid-connect/blob/main/lib/omniauth_open_id_connect.rb#L65), система будет использовать утверждения из JWT. Проблема в том, что это срабатывает на основе содержимого документа обнаружения (discovery doc), которое я не могу изменить, так как оно является частью `.well-known`. Внесение изменений в Ruby-код для принудительного использования JWT — это костыль. Мы даже думали о создании «форка» документа обнаружения и его обслуживании публично на нашем деплое, но это тоже довольно костыльное решение.

Не упустил ли я какой-то механизм для установки (или отбора) переменных вместо возни с документом обнаружения? Я не против их дублирования вместо использования discovery, но не вижу способа сделать это без патчинга кода.
