Discourse OpenID Connect (OIDC)

Привет, @balazsorban44, спасибо за напоминание по этому вопросу. Я провёл первичный обзор PR. Если у автора нет времени поработать над этими моментами, то, скорее всего, мы сможем взять это на себя. Я согласен, что поддержка PKCE была бы полезна.

Однако стоит отметить: я не думаю, что Discourse уязвим для атак «перехвата кода авторизации», от которых защищает PKCE. Аутентификация в Discourse всегда происходит в браузере по протоколу https и не использует URL-схемы уровня операционной системы, которые могли бы быть перехвачены другими приложениями.

Но, конечно, добавление дополнительного уровня безопасности не повредит :+1:

3 лайка

Не обязательно беспокоиться о безопасности.

Я учёл замечания здесь, сохранив историю первоначального автора для указания заслуг: feat: PKCE support by balazsorban44 · Pull Request #86 · discourse/discourse-openid-connect · GitHub

С радостью завершу эту работу :slight_smile:

2 лайка

Вы нашли решение этой проблемы?

К сожалению, нет.

@swt2c Я внедрил это в плагин, добавив

  params << ["client_id", "<my-client-id>"]
  params << ["logout_uri", post_logout_redirect] if post_logout_redirect

после строки params << ["post_logout_redirect_uri", post_logout_redirect] if post_logout_redirect в файле plugin.rb.

Было бы здорово получить официальную поддержку этого!

@balazsorban44 спасибо, что взялись за это! Я только что объединил PR, так что теперь в плагине есть поддержка PKCE по выбору :tada:

4 лайка

Привет, Крис,
как тебе удалось интегрировать Authentik с этим плагином? Любые подсказки будут очень полезны. Мы уже несколько недель пытаемся заставить это работать правильно, но пока не получается.

Хм, я ничего особенного не припоминаю. В чём именно ваша проблема? Хотите поделиться скриншотами вашей конфигурации (возможно, через личные сообщения)?

1 лайк

Спасибо за ответ, Крис. Конечно. Свяжусь с вами позже на этой неделе, когда будет моя команда разработчиков, которая работала над Authentik. Основные проблемы связаны с потоком и outpost.

1 лайк

У меня возникла интересная проблема: перед публичным развёртыванием я хочу протестировать, что всё работает, поэтому мой OIDC-провайдер размещён локально (в частной подсети) и недоступен из интернета.
К сожалению, это не работает, так как Discourse не разрешает подключение к частным IP-адресам.
oidc.example.org разрешается в частный IP-адрес.

OIDC Log: Fetching discovery document from https://oidc.example.org/application/o/discourse/.well-known/openid-configuration
OIDC Log: Fetching discovery document raised error Faraday::ConnectionFailed FinalDestination: all resolved IPs were disallowed
OIDC Log: Discovery document is

---

(oidc) Request phase initiated.
(oidc) Authentication failure! openid_connect_discovery_error: OmniAuth::OpenIDConnect::DiscoveryError, Discovery document is missing

Я полагаю, что поскольку openid_connect_discovery_document может изменяться только администратором, его можно считать доверенным и разрешать даже частные IP-адреса.

В настройках сайта есть параметр «allowed_internal_hosts». Если добавить внутреннее имя хоста в этот список, то запросы к нему будут разрешены через детектор SSRF.

В сервисах совместного хостинга (например, официальный хостинг discourse.org) администраторы не считаются доверенными для выполнения запросов внутри среды хостинга, поэтому эта защита включена по умолчанию.

Приношу извинения, но я не уверен, что могу следовать инструкции по установке плагина. Я запускаю Discourse в локальной среде Docker и не могу найти файл app.yml, чтобы добавить конфигурацию.
Возможно, это глупый вопрос, но есть ли руководство по установке в локальной среде разработки?

Для среды разработки Docker попробуйте проверить файл /var/discourse/containers/app.yml?
Однако для установок без Docker см. здесь:

1 лайк

Проблема в том, что я не могу найти папку containers

Если вы следовали этому руководству, возможно, стоит обратиться к этому сообщению, чтобы установить плагины?

Приветствую.
Я установил этот плагин, и он работает нормально. Проблема в том, что наше приложение Discourse имеет алиасы, поэтому я могу войти через два URL-адреса. Оба были настроены в Azure с правильными URL-адресами обратного вызова. Я заметил, что запрос к https://discourse.company.com/auth/oidc возвращает Location URL с алиасным URL, например: https://login-blah-bla/authorize?client_id=&redirect_uri=https%3A%2F%2Fdiscourse.us.company.com%2Fauth%2Foidc%2Fcallback.
Разве оно не должно учитывать исходный URL?

Существует параметр openid_connect_error_redirects, но, насколько я понимаю, он предназначен для случаев ошибок. Есть ли идеи, как изменить перенаправление на authority (то есть на discourse.company.com)?

При ручной установке пакета я получаю следующее:

Сообщение после установки от oauth2:

Вы установили oauth2 версии 1.4.11, которая больше не поддерживается (EOL).
Дальнейшая поддержка серии 1.4.x не планируется.

и рекомендации обновиться до oauth2 версии 2. Мне было бы гораздо спокойнее без таких сообщений. Есть ли планы на обновление?

Также я получаю:

Вы установили oauth версии 1.1.0, поздравляем!

Бесплатная поддержка серии 1.x завершится к апрелю 2025 года. Пожалуйста, запланируйте обновление до следующей версии до этой даты.
Единственное критическое изменение — прекращение поддержки Ruby 2.7 и любых других версий, которые к тому времени также перестанут поддерживаться.

Но, полагаю, это не к “вам”?

Здравствуйте,

Параметр «Allow new registrations» (Разрешить новые регистрации) строго необходим для работы плагина. Он позволяет автоматически создавать учётную запись при первом входе в Discourse и отображать кнопку «Register» (Зарегистрироваться). Однако возможно ли разрешить её отключение? То есть исключить возможность для пользователя, входящего через OpenID Connect, изменять свои настройки и сразу создавать учётную запись. Это позволило бы скрыть кнопки «Register», которые в данном контексте неуместны.

С уважением

Вам удалось разобраться? Я застрял на том же сообщении.

Привет, удалось ли тебе это настроить? Не понимаю, почему я застрял на этом месте. Из сотен приложений, которые я управлял с помощью OpenID или аутентификации, это доставляет мне больше всего проблем.