繁体   English   中英

在两个不同的浏览器上使用 TouchID 进行 WebAuthn 身份验证和注册?

[英]WebAuthn authentication and registration using TouchID on two different browsers?

一个人注册一个新帐户(通过credentials.create )并随后使用同一个浏览器(通过credentials.get )登录的情况很简单,因为在调用credentials.create时,用户必须授予他们的浏览器权限对给定域使用 Touch ID。 例如,请参见下图,这是一个提示用户在给定域上允许 Touch ID 的模式,由credentials.create触发:

在此处输入图像描述

如果您在如上所示的模态中 select “OK”,则可以使用 Touch ID 完成注册。 当您随后使用同一浏览器登录您的帐户时,您会看到下图所示的模式,它提供了使用安全密钥和之前注册的 Touch ID 进行身份验证之间的选择。 此模式由credentials.get触发:

在此处输入图像描述

这就是问题所在:如果用户通过另一个浏览器(例如 Chrome)创建了一个带有 Touch ID 的帐户( credentials.create ),然后尝试在 Safari 上进行身份验证( credentials.get ),Safari 认为他们只能访问安全密钥,并且不提供 Touch ID 作为选项。 请参阅以下内容以供参考:

在此处输入图像描述

这是 WebAuthn 本身的已知限制吗? 人们通常会使用不同的浏览器访问同一个网站,期望他们可以在任何浏览器上登录,而不管他们用来创建帐户的浏览器是什么。 鉴于此,如果 WebAuthn 不支持这种行为,那就很麻烦了。

最重要的是 - 开发人员如何解决这个问题? 您是否通知用户他们不仅与他们最初注册到其帐户的内部设备相关联,还与他们使用的浏览器相关联? 您是在credentials.get credentials.create 这似乎是一个 hack,但我对任何解决方案都感兴趣。

首先十分感谢。

这是 WebAuthn 本身的已知限制吗?

这与 WebAuthn API 和 macOS无关 迄今为止,macOS 是唯一一个需要 WebAuthn 凭证管理来考虑凭证是在哪个浏览器中注册的平台

...开发人员如何解决这个问题?

解决此问题的一种方法是在注册时(通过传统用户代理、较新的navigator.userAgentData等)使用新凭据存储用户的操作系统和浏览器。 然后,在 auth 中,获取用户当前的操作系统和浏览器信息,并使用它来过滤凭据以包含在您将传递给navigator.credentials.get()allowCredentials中。 如果在 macOS 上注册了凭据,则也按浏览器过滤; 在其他平台上,您可以简单地按操作系统过滤。

如果在过滤用户凭据后在 macOS 上allowCredentials为空(即因为用户有一个在 Safari 中注册但用户当前正在使用 Chrome 的单个凭据),您需要处理该问题并在提示之前提示用户以其他方式登录他们在 Chrome 中注册 Touch ID。

处理这非常烦人,但这是 macOS 上 WebAuthn 的现实。 手指越过 Apple 的密钥(现在在 Monterey 的技术预览中)一旦更广泛地推出,将提供与 iOS 的操作系统级凭据存储类似的体验……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM