问题标签 [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 投票
0 回答
877 浏览

keycloak - W3C Web 身份验证 (WebAuthn) 无法登录,需要设置凭据

设置W3C Web Authentication (WebAuthn)时出现以下错误。

在此处输入图像描述

我在平台上有现有的用户帐户,并将服务器v7.0.0v8.0.0. 登录并WebAuthn从凭据列表中选择时出现错误。

在此处输入图像描述

这是服务器记录的错误。

这是我的配置截图。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

这是错误的完整堆栈跟踪

0 投票
1 回答
330 浏览

javascript - 在 Cypress 中模拟 U2F 令牌以自动测试 Web 登录

我想在 Cypress + TS 上自动登录使用 U2F 和 USB 安全密钥的网站。我的脚本应该模拟密钥并将其传递给浏览器。

现在我一直在使用https://github.com/github/SoftU2F这是一个很好的解决方案,但在测试运行时仍然需要有人在场。

试图申请:https ://www.npmjs.com/package/virtual-u2f但是,虽然它正确生成密钥,但似乎没有任何东西传递给浏览器。

有没有人在 Js/Ts 上自动化那个登录之王?将不胜感激任何想法

0 投票
1 回答
227 浏览

security - 使用 WebAuthN 可以拒绝某些类型的身份验证方法 FIDO2)

使用 WebAuthN ( https://w3c.github.io/webauthn/ ) 进行身份验证时,是否可以隐藏某些身份验证选项?

例如,在 webauthn.io 上进行测试时,我的 android 设备显示了可用的身份验证类型,如硬件密钥、蓝牙和指纹。我是否可以以某种方式将其配置为不接受硬件密钥和蓝牙。

此外,在选择并使用我的指纹登录时,如果我使用错误的手指强制它失败,它默认会询问我的解锁图案,如果我输入我的解锁图案,我仍然会成功。在我看来,解锁图案并不安全,因为脏屏幕会在屏幕上留下带有污迹的图案。父母也把别针给孩子。我可以停止这种行为吗?如果指纹失败,则改为错误?

0 投票
1 回答
714 浏览

nfc - How to enable web app U2F via NFC on mobile

If you attempt to login to github on mobile web, it automatically detects that it's a mobile device and lets you authenticate using a NFC key. I cannot find any documentation for implementing NFC 2FA for mobile web, anyone know how this is done?

Thanks, Kevin

Update:

I have found the vocabulary word for this - its "Webauthn" and apparently there is a way for webauthn to use a U2F device that was registered on a desktop web site on a mobile web site using mobile NFC. I've added the tag in the hopes that someone can help.

0 投票
1 回答
502 浏览

javascript - 如何在移动设备上通过 WebAuthn 使用 FIDO 凭据

我已经使用 firefox-built-in 和 chrome-with-javascript U2F API 实现了基于桌面浏览器的 U2F。我在这里遵循了基本配方:

https://github.com/castle/ruby-u2f

对于每个物理设备,我有 4 个属性:

  • 证书
  • 关键句柄
  • 公钥
  • 柜台

我相信,但我不确定,在收集到有关此物理设备的这些信息后,我现在可以在移动设备上呈现完全相同的网页以实现 WebAuthn 时重新调整它的用途,而不是为用户呈现网页要进行身份验证,将呈现移动操作系统本机接口以请求 NFC 身份验证(如果设备具有 NFC)。

我正在尝试使用上面的 4 个属性来使用 nav.credentials.get 呈现 javascript,但我被卡住了。

我不清楚以下哪项是正确的

A) 您可以使用在桌面网络上的 U2F 设备注册过程中收集和验证的凭据/信息通过网络身份验证在移动设备上进行身份验证

B)如果您希望在移动设备上使用 web authn,以便它可以触发本地移动 NFC 身份验证过程,除了常规的 U2F 流程外,您还必须秘密处理 webauthn 注册(“秘密”我不是指你'故意不告诉用户他们正在这样做,而是用户不知道 A 和 B 之间的区别)。

按照上面链接的示例,他们的 javascript 类似于:

在此处使用 Mozilla 示例:

https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions

我正在尝试将其调整为:

但尚不清楚我如何将 U2F 属性映射到 webauthn 属性。我似乎找不到这个工作的具体例子,但我确信它确实有效,因为 GitHub 和 DropBox 都有这个确切的流程——你在桌面网络上注册 U2F 设备,然后 NFC 设备可以在本机移动设备上使用.

顺便说一句,我想要实现这一点的原因是,在本机移动设备上的用户永远不必离开您的 Web 应用程序,呈现本机 NFC 界面并且它们被神奇地带回您的 Web 应用程序。我目前拥有的是,如果检测到移动设备,则呈现 OTP 界面,这需要用户切换到像 Authy 这样的身份验证器应用程序,然后复制 OTP 并返回移动网络。只需拉出我们的钥匙并发出嗡嗡声就更好了。

感谢您的帮助,凯文

0 投票
0 回答
39 浏览

javascript - 每次都需要 USB 密钥的 publicKey 凭据

当我尝试使用 WebAuthn 登录时navigator.credentials.get()。我需要在属性上推送一些值,allowCredentials因为 Chrome Mobile 它不允许为空allowCredentials。困难的部分在transports属性内部,因为根据 Mozilla 文档,它是一个字符串数组。我有一个只有一个字符串 = 的数组internal,因为我不需要 USB 或其他任何东西。

使用这些配置,一切正常,但是当进程完成身份验证时,结果是一个错误: 在此处输入图像描述

如果transports为空,则该过程需要USB Key...我不明白这一点。

0 投票
1 回答
77 浏览

.net - .Net 中的 WebAuthN 和 BouncyCastle

我正在为 YubiKey 和 webAuthN 进行概念验证;我想我已经完成了基本步骤,但是我在验证签名时遇到了一些问题;

有几个地方对我来说可能会出错:

1)当我执行“navigator.credentials.create”时,我得到了发送到服务器的凭据对象。

2) 在服务器上我得到 COSE 公钥;它有一个 X 和 Y 点(这是椭圆曲线加密)

3)我将 X 和 Y(32 字节 Uint8Array)转换为 Org.BouncyCastle.Math.BigInteger 我在这里遇到的一个问题是有时这些 X 和 Y 坐标会产生 NEGATIVE BigInteger(最左边的位已设置)我读到这意味着这是“前导”零字节,即 33 字节数组,字节 0 为“0” - 不确定这是否属实,但在设置第一位的情况下找不到其他指令

4)我从“navigator.credentials.get”得到断言并将其发送到服务器

5) 我使用上一步中的 X 和 Y 来构建公钥,

6) 我使用 Base64Decode 将 clientDataJSON 和authenticatorData 从断言解码为各自的ByteArrays

7) 我使用 SHA256 散列“clientDataJSON”元素

8)我构建了一个包含原始“authenticatorData”和散列“clientDataJSON”(连接)的字节数组

9) 我使用 Base64Decode 从断言中解码 Signature 元素

10) 我使用上面的公钥创建了一个 Org.BouncyCastle.Crypto.Signers.ECDsaSigner

11)我在连接的authenticatorData和ClientDataHash上使用VerifySignature。

这总是返回“FALSE”(即错误的签名)

以下是一些相关代码:

任何帮助是极大的赞赏!提前致谢!

0 投票
1 回答
115 浏览

webauthn - WebAuthn,获取 credentialPublicKey 长度

在解析 CBOR 之后attestationObject,我现在正在尝试解析authData.

这包含:

https://w3c.github.io/webauthn/#authenticator-data

  • 32 字节,rpIdHash
  • 1 个字节,flags(包括ATED标志)
  • 4字节,signCount
  • ? 字节,attestedCredentialData
  • ? 字节,extensions

假设AT标志为真,attestedCredentialData则从字节 37 开始,包含:

https://w3c.github.io/webauthn/#sctn-attested-credential-data

  • 16 字节,aaguid
  • 2 个字节,credentialIdLength(字节 53 - 55,在许多实现中都可以看到)
  • credentialIdLength 字节,credentialId
  • ? 字节,credentialPublicKey

这意味着我可以得到credentialIdLength,并提取credentialId.

但是多久了credentialPublicKey

我可以读到结尾authData;这就是他们在https://webauthn.guide/上显示的内容:

但是,如果您回顾一下 authData,它可能会包含extensions这之后的数据(如果ED标志为真)。


我发现 Attestation 概览图对于其中的大部分内容都非常有用:

https://w3c.github.io/webauthn/#sctn-attestation

0 投票
1 回答
667 浏览

encryption - 用于加密的 Webauthn

我们有一个带有 PWA 的项目,我们希望在其中实施客户端加密。我们想将 Webauthn 用作与密码相结合的第二个因素。在后台,我们使用随机生成的密钥来加密/解密数据库,该密钥与服务器上的密码对称加密存储。但是,我正在努力寻找一种使用 webauthn 向此密钥添加加密的好方法。到目前为止我的尝试:使用来自https://webauthn.guide的原始 JS 示例,但是我找不到始终相同且可用于对称加密/解密的部分,即使使用相同的登录时公钥也会发生变化多次使用 USB 令牌 (???)

使用npm 中的 fido2-lib:我无法让示例工作,因为示例没有很好的文档记录并且很长

使用像spring webauthn这样的服务器端身份验证,但是我不希望服务器知道有关客户端的任何信息。

有什么建议我可以使用 webauthn 实现加密吗?

0 投票
0 回答
315 浏览

javascript - 使用 WebAuthn 时偶尔出现 NotSupportedError 异常

我们使用 WebAuthn。虽然,有些设备会抛出异常NotSupportedError: The user agent does not support public key credentials.

以下是我们检查平台身份验证功能是否可用的方法:

每次我们尝试调用时,我们都会看到至少有两个设备抛出异常navigator.credentials.create()

  • Mozilla/5.0 (Linux; Android 9; ONEPLUS A3003) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36
  • Mozilla/5.0 (Linux; Android 9; LG-H930) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36

这是电话:

如何避免浏览器抛出该异常?