WebAuthn 支持

这非常棒!

不过有个小问题:在 Safari/Mac 上,Web 认证是一个仅限开发者的功能,默认处于关闭状态。启用后,它能正常工作。但我们应该在 Web 认证未启用时显示一条消息或警告。目前,在默认设置的 Safari 中,界面没有任何提示表明注册流程无法运行(控制台会报错):

11 个赞

我猜我们可以使用 navigator.credentials 进行特性检测。

9 个赞

有些人即使觉得多设备很好,也很难证明额外支出的合理性 :smiley:

7 个赞

哎呀,我在 navigator.credentials.get 上做了功能检查,但忘了在 create 上做,抱歉!这会很快修复的!

8 个赞

最新的提交似乎可以正常工作。我刚刚在我的安卓手机上成功使用了双因素认证(支持指纹!)。

6 个赞

嘿,Penar,我现在已经修复了这个问题,你能在 Safari 上检查一下吗?https://github.com/discourse/discourse/pull/8146。我只是不确定我使用的功能检测方法在 Safari 关闭该功能的情况下是否有效。

9 个赞

Sam 抢先完成了合并,不过在 Safari 上看起来不错,谢谢 Martin!

10 个赞

没错,但在这种情况下,这是 Discourse 工作的正常部分,因此我们会承担相关费用。如果之前表述不够清楚,抱歉,希望现在清楚了?

9 个赞

恭喜你们支持了 WebAuthn!看到你们没有使用 webauthn gem 而是自己实现了一个解决方案,这很有趣。如果有任何反馈给我们,我很乐意倾听 :smiley:

我注意到你们的实现 仅支持算法 -7 (ES256),但根据 微软的文档,Windows Hello 平台认证器(基于 TPM 2.0 硬件)需要 -257 (RS256)。自 2016 年 7 月 28 日起,TPM 2.0 已成为新 Windows 10 桌面型号的要求,因此这涉及相当数量的硬件。

关于“登录流程”原型的一个建议:WebAuthn 有一个 官方标志,可以用来替代通用的指纹图像。除了指纹识别外,面部识别、滑动图案或 PIN 码也是常见的用户验证选项。

10 个赞

@Martin_Brennan:arrow_double_up: 有什么看法吗?

6 个赞

感谢你的反馈,Rafe,我们确实需要在此处添加额外的算法。同时也感谢你提供官方标志的链接!我当初只设置一种算法的想法,是为了在 V1 版本中仅添加最少必需的支持算法以使功能正常运行,因为我不确定所有算法之间的细微差别,而且我能找到的所有示例都使用了 ES256。

至于当时为何选择不使用该 gem,我对此反复斟酌了很久,也深知迟早会面临关于这一决定的提问。我确实仔细阅读了该 gem 的大量代码,以更好地理解其实现。主要原因如下:

  1. 不希望为 Discourse 增加额外的依赖。无论该 gem 的代码多么优秀,每个 gem 依赖都会带来额外的开销。
  2. 希望深入理解 Discourse 这一关键安全模块的运作方式。我认为将代码保留在 Discourse 核心内部会使逻辑更清晰、更易于扩展,而无需面对所谓的“黑盒”。(这并非对该 gem 本身或其复杂性的指责,我意识到大家可以直接查看其代码,而且我发现那里面的逻辑非常容易理解)。
  3. 不希望添加超出最低需求之外的代码来运行 WebAuthn。例如,我们在初始实现中省略了认证(attestation)。我认为,当我们只需要一把扳手时,没必要搭建整个工具棚。

话虽如此,我当时的决定可能有些误判。如果我们进入 WebAuthn 支持的 V2、V3 等版本,涉及认证、更多支持的算法以及其他功能,那么要让我们成为所谓的“WebAuthn 专家”可能会变得过于繁琐。到那时,我认为我们可以重新评估是否使用该 gem。

16 个赞

支持额外的 RS256 算法的功能现已合并 FEATURE: Support RS256 algorithm for webauthn by martin-brennan · Pull Request #8385 · discourse/discourse · GitHub

14 个赞

看来,iOS 13.3 和 macOS Catalina 10.15.2 现在也支持 FIDO2 认证了 :tada:

此更新还包括错误修复和其他改进。此更新:

  • 在 Safari 中增加了对符合 FIDO2 标准的 NFC、USB 和 Lightning 安全密钥的支持**
8 个赞

可惜iPhone还需要第三方设备才行。希望iOS++能在设备认证和安全芯片方面内置此功能,就像Windows、macOS和Android那样。

9 个赞

能看着 Discourse 登录,我真是太激动了!

说实话,我有点惊讶内置的身份验证器支持还没有到位……但无论如何这都是个令人振奋的消息——我会继续屏息以待。

7 个赞

我发现在托管的 Discourse 实例中,为部分用户启用双因素认证(2FA)时可能存在 UI 不一致的问题:

在列出所有“工作人员”用户时,我的账户并未显示已启用 2FA:

  • 账户摘要页面暗示 2FA 已开启,因为按钮文本显示为“管理双因素认证”。
  • 双因素认证页面显示已启用安全密钥,并且第二因素可以被禁用。
  • 同一实例中选择使用基于令牌的身份验证器(未使用安全密钥)的其他用户,在“所有用户”列表中会显示锁形图标。

请告知这是否是一个 UI 缺陷,还是仅添加安全密钥对于该平台而言不足以启用 2FA。

5 个赞

我会查看一下这个问题,但我的初步判断是,如果实际的 2FA 部分显示正确,那么用户列表中的问题可能只是一个界面显示错误。感谢您的反馈!

9 个赞

这就是问题所在。修复正在构建中,我一旦能够操作就会合并:FIX: Admin user list not showing 2FA icon for only security keys enabled by martin-brennan · Pull Request #8839 · discourse/discourse · GitHub

编辑:现已修复。

11 个赞

欢迎来到这个勇敢的新世界

Apple 已加入 FIDO 联盟(即快速在线身份联盟),该组织成员已包括 Google、Intel、Microsoft 和 Samsung 等巨头。

12 个赞

在 iOS 14 上,这可以通过 TouchID 或 FaceID 实现。

11 个赞