Добавить поддержку SCIM в качестве провайдера услуг

Как уже упоминалось здесь, я считаю, что было бы отличной функцией, если бы Discourse поддерживал протокол SCIM. SCIM — это стандарт, предложенный IETF через RFC7644 и RFC7643, который направлен на предоставление решений для управления пользователями и группами через простой REST API. Наш случай использования заключается в управлении идентификацией пользователей и членством в группах через отдельный сервис, выступающий в роли SCIM-клиента; в нашем случае это Keycloak. Discourse будет действовать как SCIM-провайдер услуг. В дополнение к существующим возможностям SSO и централизованного создания учётных записей это даст следующие преимущества:

  • назначение пользователей в группы;
  • немедленное изменение информации о пользователях в нескольких приложениях;
  • удаление пользователя, когда он исключён из SSO;
  • получение списка пользователей или групп стандартным способом;

Мы получили финансирование от NGI через NLNet на реализацию SCIM; вы можете прочитать предложение и информацию о связанной работе на нашем форуме здесь. Я пока попробую реализовать первое решение в виде плагина для Discourse, но было бы здорово в будущем интегрировать это в ядро Discourse. Буду рад узнать ваше мнение и предложения!

5 лайков

Кажется странным, что их спецификация использует /Users и /Groups вместо чего-то вроде .well-known/scim/Users. Очевидно, что это будет конфликтовать с существующими маршрутами во многих приложениях.

Я с радостью помогу с этим, если у вас есть свободный бюджет.

Представляю, что если решение будет хорошо написано и широко использоваться (или потребуется несколькими корпоративными клиентами), оно может стать официальным плагином.

Не думаю, что оно когда-либо войдёт в ядро — даже OAuth2 является плагином.

4 лайка

Я считаю, что в качестве префикса для конечных точек SCIM можно использовать любой путь, например api/scim/v2/Users или известные пути, которые вы предложите.

Да, я понимаю опасения, связанные с ядром, поэтому, возможно, целью может стать то, что это станет официальным плагином. Спасибо также за предложение помощи; дополнительного бюджета нет, но посмотрим, как это будет развиваться в будущем.

1 лайк

Ах, это имеет смысл. Я так и думал, но не обратил на это внимания при беглом чтении. Посмотрите на другие плагины аутентификации в качестве примера.

Вот официальные плагины, в названии которых есть «auth»:

discourse-apple-auth/                  discourse-microsoft-auth/
discourse-authentication-validations/  discourse-oauth2-basic/
discourse-auth-no-email/               discourse-vk-auth/
discourse-development-auth/            discourse-wikimedia-auth/

Звучит как интересный проект

1 лайк

Первая версия плагина теперь доступна здесь:

Маппинг пока очень простой: работают только базовые поля пользователей и групп. Я протестировал это с плагином SCIM для Keycloak, и вы уже можете добавлять/изменять пользователей в Keycloak, после чего они будут создаваться/обновляться в Discourse. Плагин SCIM для Keycloak находится здесь:

Любые отзывы очень приветствуются :slight_smile: Мы продолжим тестирование с Keycloak в нашей среде, а также планирую протестировать его с Authentik.

4 лайка

Это круто, отличная идея. С нетерпением жду тестирования. Спасибо!

Будет здорово, если вы опубликуете это как тему в категории #plugin :slight_smile:

1 лайк

В категории «Плагины» кнопка «Отправить» для меня отключена, и я вижу сообщение о том, что мне не разрешено публиковать сообщения в этой категории.

Присоединяйтесь к группе @plugin_authors. Это позволит вам создавать темы в этой категории.

А, спасибо, я отправил запрос :slight_smile:

1 лайк

… и, наконец, опубликовано: SCIM Plugin

2 лайка