问题标签 [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.
javascript - 在 Cypress 中模拟 U2F 令牌以自动测试 Web 登录
我想在 Cypress + TS 上自动登录使用 U2F 和 USB 安全密钥的网站。我的脚本应该模拟密钥并将其传递给浏览器。
现在我一直在使用https://github.com/github/SoftU2F这是一个很好的解决方案,但在测试运行时仍然需要有人在场。
试图申请:https ://www.npmjs.com/package/virtual-u2f但是,虽然它正确生成密钥,但似乎没有任何东西传递给浏览器。
有没有人在 Js/Ts 上自动化那个登录之王?将不胜感激任何想法
security - 使用 WebAuthN 可以拒绝某些类型的身份验证方法 FIDO2)
使用 WebAuthN ( https://w3c.github.io/webauthn/ ) 进行身份验证时,是否可以隐藏某些身份验证选项?
例如,在 webauthn.io 上进行测试时,我的 android 设备显示了可用的身份验证类型,如硬件密钥、蓝牙和指纹。我是否可以以某种方式将其配置为不接受硬件密钥和蓝牙。
此外,在选择并使用我的指纹登录时,如果我使用错误的手指强制它失败,它默认会询问我的解锁图案,如果我输入我的解锁图案,我仍然会成功。在我看来,解锁图案并不安全,因为脏屏幕会在屏幕上留下带有污迹的图案。父母也把别针给孩子。我可以停止这种行为吗?如果指纹失败,则改为错误?
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.
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 并返回移动网络。只需拉出我们的钥匙并发出嗡嗡声就更好了。
感谢您的帮助,凯文
.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”(即错误的签名)
以下是一些相关代码:
任何帮助是极大的赞赏!提前致谢!
webauthn - WebAuthn,获取 credentialPublicKey 长度
在解析 CBOR 之后attestationObject
,我现在正在尝试解析authData
.
这包含:
https://w3c.github.io/webauthn/#authenticator-data
- 32 字节,
rpIdHash
- 1 个字节,
flags
(包括AT
和ED
标志) - 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 概览图对于其中的大部分内容都非常有用:
encryption - 用于加密的 Webauthn
我们有一个带有 PWA 的项目,我们希望在其中实施客户端加密。我们想将 Webauthn 用作与密码相结合的第二个因素。在后台,我们使用随机生成的密钥来加密/解密数据库,该密钥与服务器上的密码对称加密存储。但是,我正在努力寻找一种使用 webauthn 向此密钥添加加密的好方法。到目前为止我的尝试:使用来自https://webauthn.guide的原始 JS 示例,但是我找不到始终相同且可用于对称加密/解密的部分,即使使用相同的登录时公钥也会发生变化多次使用 USB 令牌 (???)
使用npm 中的 fido2-lib:我无法让示例工作,因为示例没有很好的文档记录并且很长
使用像spring webauthn这样的服务器端身份验证,但是我不希望服务器知道有关客户端的任何信息。
有什么建议我可以使用 webauthn 实现加密吗?
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
这是电话:
如何避免浏览器抛出该异常?