ID Discourse и 2FA

@JammyDodger, недавно я зарегистрировал аккаунт для получения бесплатного экземпляра:

Там я, похоже, столкнулся с той же проблемой, что описана в t/227972:

Большинство документов указывает на то, что это должно быть включено по умолчанию:

Однако у меня даже нет возможности её включить, и по умолчанию она не активирована:

Переместил ваш пост сюда, так как это другая проблема, чем Contribute > Bug, в который вы изначально написали.

Discourse ID не использует OAuth2. По сути, он функционирует как провайдер SSO, что отличается.

Чтобы настроить 2FA, вам нужно сделать это у провайдера SSO, ID. А именно: https://id.discourse.com/my/preferences/security.

@jomaxro, спасибо. Возможно, меня сбило с толку то, что я попытался установить enforce_second_factor в значение “all”, но не смог, так как получил сообщение: “Вы не можете принудительно включать 2FA, если локальные входы отключены”. Если это не слишком оффтоп, в чём решение этой проблемы?

Это хороший вопрос… и у меня нет на него ответа. Я подключил команду, чтобы найти того, кто знает!

Итак, меня поправила команда. Discourse ID действительно использует OAuth2 «под капотом» — приношу свои извинения. Я думал, что используется другой протокол.


Отвечая на ваш вопрос: мы не поддерживаем двухфакторную аутентификацию (2FA) при использовании внешних способов входа. Как указано в сообщении, которое вы видели, принудительное применение 2FA невозможно без включения локального входа. Мы полагаемся на провайдера внешнего входа (в данном случае Discourse ID, но это относится ко всем внешним провайдерам) в вопросах управления 2FA, включая его принудительное применение.

@jomaxro, это значит, что с бесплатным пробным планом я не могу изменить эту настройку? Или же я могу как-то отключить Discourse ID?

Хотелось бы уточнить: вы имеете в виду бесплатную пробную версию или бесплатный план?

@jomaxro, приношу извинения. Бесплатный план, насколько я понимаю:

Вопрос к нам: передаёт ли IdP в SP информацию о том, выполнил ли пользователь многофакторную аутентификацию (MFA)?

Я думаю об аналогичном механизме U2F / FIDO — программа может запросить у устройства подтверждение (аттестацию) относительно уровня взаимодействия пользователя, который ожидается или требуется для учётных данных.

Если Discourse ID… или любой другой IdP (SAML? OAuth2? OIDC?) передаёт эту информацию в SP, это может стать данными, которые мы потенциально сможем использовать.

Если нет, то нам, по сути, придётся реализовать MFA после федеративного входа, чтобы получить эту гарантию.

Стандартный способ реализации этого — через OIDC. На данный момент Discourse ID построен исключительно на OAuth2. Для поддержки флага MFA нам потребуется внедрить OIDC на уровне провайдера и передавать значения MFA туда и обратно для клиентов, которым это необходимо.

Существует несколько сложностей:

  • В ядре Discourse есть возможность требовать 2FA только для определённых типов пользователей (сотрудников или всех); вероятно, нам потребуется аналогичная поддержка через ID.
  • ID позволяет вход через Google/Apple/Facebook/Github, но они не всегда надёжно сообщают, завершил ли пользователь 2FA при входе… Возможно, нам придётся реализовать 2FA на уровне ID, а также, вероятно, потребовать двойную 2FA для некоторых пользователей, что не является идеальным решением.
  • Достаточно ли 2FA на уровне провайдера идентификации (то есть не на локальном экземпляре) для всех потребителей? В общем случае я считаю, что да, но прежде чем принимать решение, нам нужно провести дополнительное исследование.