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