Я уже давно пытаюсь найти плагин SSO, который позволял бы использовать утверждения (claims) от моего IdP для пользователей Discourse.
В плагине OIDC вы фактически привязаны к конечной точке userinfo. Это не так уж плохо, но я пытался использовать другую информацию из нашего хранилища идентификации, а результат userinfo нельзя настроить. Я пробовал заставить плагин OIDC использовать id_token_info для создания пользователя, но безуспешно.
Я вернулся к плагину oauth, но на первый взгляд у него те же базовые ограничения: он зависит от информации о пользователе из конкретного конечного пункта. Я пытаюсь найти решение, которое возвращало бы содержимое JWT-утверждений, но это не совсем типичный сценарий использования, поэтому я не жду больших успехов.
Изначально я думал, что “callback userinfo paths” в oauth basic можно использовать для маппинга утверждений в пользователя, но в ответе всегда возвращаются null, и вставка не удаётся. Я могу декодировать токен от IdP и вижу правильные утверждения, в данном случае на корневом уровне JSON, такие как iss, exp и т. д., но не могу связать их со стороной ActiveRecord.
Я рассматриваю jwt, но в нём, похоже, вообще нет маппинга утверждений на пользователя. По сути, если вы получаете 200, значит всё в порядке, что тоже не то, что я искал.
Также я нашёл omniauth-jwt](GitHub - discourse/discourse-omniauth-jwt: An OmniAuth strategy that uses JSON Web Token for Single Sign-On · GitHub), который кажется ближе к моей цели, хотя и не выглядит как плагин и, похоже, не поддерживается активно. Возможно, я мог бы это исправить, но это слишком сложная задача для моих текущих планов.
Не могли бы вы подсказать направление для поддерживаемого плагина, который маппит JWT-утверждения на пользователя, или указать, где я могу ошибаться при использовании одного из существующих плагинов?