问题标签 [webauthn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
793 浏览

macos - 如何在 MacOS WKWebView 中支持 WebAuthN?

Safari 13 支持 WebAuthN,但 WKWebView 不支持。这是测试页面:https ://demo.yubico.com/webauthn-technical/registration 。它似乎navigator.credentials没有在 WKWebView 中实现。有没有办法添加 WebAuthN 支持?

0 投票
1 回答
379 浏览

public-key-encryption - 使用带有电话触摸 ID 的导航器凭据 api

我正在尝试为 webauthn api 创建一个爱好项目。我有一个创建凭据的页面,它(正确地)提示我们使用安全密钥。我想在我的 mac 上使用我的 touchid(在三星 s9 上)或 touchid 来创建凭证(这似乎不起作用)。我需要做任何额外的事情才能使用 touch id 吗?

在此处输入图像描述

下面是创建凭证的代码(我已经更改了域名)。

0 投票
1 回答
57 浏览

webauthn - 为什么网络钓鱼网站会要求用户通过 webauthn,而不是直接要求用户名/密码?

我知道 FIDO webauthn 协议是网络钓鱼证明,但为什么网络钓鱼网站会要求用户通过 webauthn,而不是它可以明确要求用户名/密码。

我试图暗示的是,只有当它在其所有身份验证端点上完全启用 FIDO 时,FIDO 才是服务的网络钓鱼证明。如果它在少数端点上具有 FIDO,但甚至有一个端点是单因素的,那么您仍然容易受到网络钓鱼的影响。我的理解是,当 FIDO 说它的网络钓鱼证明时,这意味着即使攻击者掌握了您的凭据,它也是无用的,因为他们仍然必须使用 FIDO 密钥来访问该帐户。而且由于单因素端点暴露了这一点,除非您完全使用 FIDO,否则您不是网络钓鱼证明。我的理解正确吗?

0 投票
1 回答
214 浏览

delphi - 使用来自 Yubico 的 fido2.dll 进行 Webauthn 凭证验证

我开始在 Delphi 中对 yubicos fido2.dll 进行接口,并且能够根据提供的示例对其进行接口。现在我想更进一步,在例如 apache 服务器上使用 dll 来处理凭证创建和断言。

所以..为此,我基本上使用在测试站点https://webauthn.io/上找到的 javascripts

基本上我想模仿一些服务器功能来创建凭证。在网站上可以设置一些属性 - 在我的环境中,它们来自服务器。

目前,我已经与客户端进行了通信以发出凭据初始化 - 服务器响应挑战。查询密钥,浏览器创建凭据并将其发送回服务器。这虽然我对来自服务器的数据有问题,也就是我在解码 attestationObject 部分时遇到问题。

所以这是来自我的服务器的凭证初始化 json:

来自服务器的结果:

这是一个应该验证凭据的控制台程序:(请注意,您需要将上述内容粘贴到文本文件中并将其加载到控制台中)。

cbor和fido2项目可以在 github 上找到

我实际上对返回的 CBOR 编码的 attestationObject 有问题。如果设置了常驻密钥属性,则证明对象只有 63 个字节长 - 并且还有一些字节实际上没有被编码。所以......那里的 cbor 解码要么失败,要么我得到的数据不符合 webauthn 证明对象,该对象应该在这些位置返回凭证 id 和公钥(然后也是 cbor 编码的)。如果驻留密钥属性为假,如上述语句中的情况,则 fido dll 返回错误的身份验证数据。所以......有人知道我做错了什么吗?

它基本上应该如图所示,但它要么在凭证 ID 中间的 63 个字节之后结束,要么在 dll 中失败。

0 投票
1 回答
401 浏览

webauthn - FIDO2 与 U2F/CTAP1 的兼容性

有很多消息来源说 FIDO2/CTAP2 向后兼容 U2F:

...所有以前认证的 FIDO U2F 安全密钥和 YubiKey 将继续作为支持 WebAuthn 的 Web 浏览器和在线服务的第二因素身份验证登录体验。-尤比科

但是在查看了规范之后,我很难看到它在实践中是如何工作的。具体来说,FIDO2 的依赖方标识符和 U2F 的应用程序身份之间似乎存在不匹配。

在 U2F 中,应用程序标识是一个 URL,例如https://example.com. 应用程序标识的 SHA-256 称为应用程序参数应用程序参数是在注册和认证过程中实际发送给认证者的参数。

在 FIDO2 中,等价物似乎是依赖方标识符,它被定义为域名,例如example.com.

依赖方标识符应用程序身份在 FIDO2/CTAP2 和 U2F 中的用途相同。但是,CTAP2 身份验证器直接将依赖方标识符作为 UTF8 字符串获取,而 U2F 身份验证器仅获取应用程序身份的 SHA-256 哈希(应用程序参数)。

CTAP的FIDO 文档描述了 CTAP2 如何映射到 CTAP1/U2F。在其中,他们只是将依赖方标识符直接视为应用程序身份

令 rpIdHash 为大小为 32 的字节数组,使用 rp.id 参数的 SHA-256 哈希作为 CTAP1/U2F 应用程序参数(32 字节)初始化

CTAP 文档中的图形

这似乎不一致。假设我是example.com,并且我很早就采用了 U2F 第二因素身份验证。我的应用程序 IDhttps://example.com,所以我原来的 U2F 应用程序参数是SHA256("https://example.com")

但是,如果我随后切换到使用 Webauthn,我的依赖方标识符将只是example.com. 如fido-client-to-authenticator-protocol-v2.0 的第 7 节所述,将其转换为U2F 应用程序参数时,结果值应为:SHA256("example.com")

那显然是不同的。在我切换到 WebAuthn 后,以前设置了 U2F 密钥以用于我的网站的任何人都将无法再使用它们:除非他们重新注册了他们的密钥。当然,他们需要能够登录才能做到这一点。

深入挖掘,我注意到他们在文档中给出的示例有一个依赖方标识符example.com但他们在示例中给出的哈希是......

这不是上述两个选项中的任何一个。我仍然不清楚什么字符串散列到该值。

那么我在这里做错了什么?使用 U2F 部署 2FA 的服务如何在不要求用户重新注册其安全密钥的情况下切换到 FIDO2/Webauthn?我肯定错过了什么。

0 投票
0 回答
202 浏览

authentication - Yubico / Attestation 和 Assertion 之间的凭证 ID 长度不匹配

我正在使用 AAGUID 为 ff8a011f3-8c0a-4d15-8006-17111f9edc7d(Yubico v5.1 的安全密钥)的 Yubico 安全密钥为我的 Web 应用程序执行无密码身份验证。当我创建/注册新凭据时,我在创建凭据选项的authenticatorSelection部分中使用属性“ requireResidentKey = true ” :

返回的Attestation 数据包含 16 个字节的凭证 id:

所以例如我会收到一个 16 字节的 base64url id,看起来像:AUpf0KmNJrRluGG-65D54Q

然后我使用这个 16 字节的 id 作为密钥来保存生成的凭证。当我使用 Yubico 密钥登录时,返回的断言数据包含相同的 16 字节凭据 ID:

然后我可以使用这个凭证 ID 来检索我存储的凭证数据并验证断言。所以到目前为止一切都很好......

然后我正在阅读 W3C Editor's Draft on Web Authentication: An API for access Public Key Credentials Level 2并注意到“ requireResidentKey ”已被弃用,取而代之的是采用枚举值的“ residentKey ”属性:

requireResidentKey,布尔类型,默认为 false 注意:保留此成员是为了向后兼容 WebAuthn 级别 1,但不推荐使用 residentKey。如果调用者提供了 residentKey 并且客户端理解了后者,则忽略 requireResidentKey。否则,使用 requireResidentKey 的值。请注意,requireResidentKey 的值默认为 false。

如果在没有 residentKey 的情况下使用,它描述了依赖方对居民凭证的要求。如果 requireResidentKey 设置为 true,则验证者在创建公钥凭证时必须创建客户端驻留的公钥凭证源。

residentKey,类型为 ResidentKeyRequirement 注意:此成员取代 requireResidentKey。如果两者都存在并且客户端理解 residentKey,则使用 residentKey 而忽略 requireResidentKey。

有关 residentKey 的值和语义的描述,请参见 ResidentKeyRequirement。

所以我将requireResidentKey更改为residentKey,其枚举值为“ required ”,如图所示:

现在,当我创建一个新凭证时,我会返回一个64 字节的凭证 ID。这本来很好,只是当我使用 Yubico 安全密钥登录时,我得到一个16 字节的凭据 ID,它显然与我在创建凭据阶段保存的 64 字节不匹配。

有趣的是,当我尝试同时使用requireResidentKey = trueresidentKey = 'required'时,我得到了为 Attestation 和 Assertion 返回的 16 字节凭据 ID。

这可能是不支持新的residentKey属性吗?如果是这样,为什么我会得到一个 64 字节的凭证 ID?这可能是非居民凭证 ID 的长度吗?

我的代码正在使用旧的requireResidentKey属性恢复工作,但我很想知道这里发生了什么,以及新的 Yubikeys 是否支持residentKey属性?

0 投票
0 回答
1713 浏览

javascript - 如何修复 JS 错误:用户代理不支持公钥凭据

我正在使用新的 PasswordCredential API 并创建了这段代码。它正在工作。但是对于某些用户,它会引发此错误The user agent does not support public key credentials.

尽管我没有使用该 API,但我们的许多用户都收到了该错误。那么,我是否应该像这样检查这两种情况:

if (window.PasswordCredential && typeof(PublicKeyCredential) != "undefined" ) {

如果是这样,我为什么要对两者都进行检查?

0 投票
1 回答
157 浏览

c# - WebView 类 (Windows.UI.Xaml.Controls) 不支持 WPF 中的 WebAuthn

我有一个使用 WebView 类来启动浏览器的 WPF 应用程序。我需要加载一个调用 WebAuthn 功能的 url。目标 URL 是https://demo.yubico.com。但是由于不支持浏览器而出现错误?在此处输入图像描述

有什么解决方法吗?

0 投票
1 回答
235 浏览

android - Web 身份验证:无法使用指纹进行身份验证

我已经为 android-safetynet 实现了 WebAuthn 注册。我可以在哪里使用我的指纹进行注册。但是,我没有选择使用指纹进行身份验证。

这背后的原因是什么?

这是提供给 navigator.credentials.create() 的对象

这是提供给 navigator.credentials.get() 的对象

0 投票
0 回答
164 浏览

openssl - 如何使用可以通过 OpenSSL 验证的 Windows 加密 API 进行签名?

我正在使用加密 API 进行签名并将其发送到使用开放 SSL 验证签名的网络服务器。签名使用 Windows 加密 API 成功验证,但在服务器端使用开放 SSL 验证时出错。

错误:

ECDsa 签名不是有效的 DER 序列

签名功能: