Discourse ID 与双因素认证

@JammyDodger,我最近在一个免费实例上注册了账户:

在那里,我似乎也遇到了 t/227972 中描述的问题:

大多数文档都指出这应该默认启用:

然而,我甚至没有启用它的选项,而且它默认也未启用:

已将您的帖子移至此处,因为这与您在 Contribute > Bug 中最初发布的议题不同。

Discourse ID 并未使用 OAuth2。它实际上充当的是 SSO 提供商,这与 OAuth2 不同。

要配置双因素认证(2FA),您需要在 SSO 提供商 ID 处进行设置。具体网址为:https://id.discourse.com/my/preferences/security。

@jomaxro,谢谢。也许让我困惑的是,我尝试将 enforce_second_factor 设置为“all”,但未能成功,因为我被告知“如果本地登录已禁用,则无法强制实施双因素认证。”如果这不太离题,有什么解决方案吗?

这是个很好的问题……而我目前没有答案。我已经联系团队,看看谁能解答!

因此,团队已纠正了我。Discourse ID 确实底层使用了 OAuth2——在此致歉。我原以为它使用的是其他协议。


关于您的问题,我们不支持外部登录方式的二次验证(2FA)。正如您看到的消息所述,若未启用本地登录,则无法强制实施 2FA。我们依赖外部登录提供商(本例中为 Discourse ID,但适用于所有外部提供商)来管理 2FA,包括强制实施。

@jomaxro,这是否意味着在使用免费试用计划时,我无法修改该偏好设置?或者,我能否以某种方式断开 Discourse ID 的连接?

想确认一下,您指的是免费试用,还是免费计划

@jomaxro,抱歉。是免费版计划,我认为是:

我们的问题是:身份提供商(IdP)是否会将用户是否执行了多因素认证(MFA)的信息传递给服务提供商(SP)?

我想到的是类似于 U2F / FIDO 的机制——程序可以要求设备提供关于凭证所需/预期的用户交互级别的证明。

如果 Discourse ID……或任何其他身份提供商(SAML?OAuth2?OIDC?)将此类信息传递给服务提供商,那么这将是我们可能利用的一条信息。

如果不能,我们恐怕只能在联合登录后实施多因素认证,才能获得这一保障。

实现这一点的标准方式是通过 OIDC。Discourse ID 目前仅基于 OAuth2 构建。若要支持 MFA 标志,我们需要在提供商层实现 OIDC,并在需要该功能的客户端之间传递 MFA 值。

这存在若干复杂情况:

  • 在 Discourse 核心中,我们拥有仅针对特定用户类型(如工作人员或所有用户)强制要求 2FA 的选项;我们很可能需要通过身份提供商(ID)支持类似的功能。
  • ID 支持通过 Google、Apple、Facebook 和 Github 登录,但这些平台无法可靠地告知用户登录时是否完成了 2FA……我们可能需要在 ID 层实施 2FA,并且很可能导致部分用户面临双重 2FA 验证,这并非理想方案。
  • 在身份提供商层(即不在本地实例上)实施 2FA 是否足以满足所有使用者的需求?总体而言,我认为可以,但在做出承诺之前,我们需要进行更多调研。