问题标签 [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.
go - Go中的生物识别登录(webauthn),如何验证签名
随着最近的 Windows 周年更新,Edge 现在支持使用 Windows Hello 的生物特征验证(参见https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/dev-guide/device/web-authentication / , https://blogs.windows.com/msedgedev/2016/04/12/a-world-without-passwords-windows-hello-in-microsoft-edge/ )
我在 C#、PHP 和 Node.js 中有一些示例,并且正在尝试使其在 Go 中工作。
以下在 JS 中有效(我在挑战和密钥中进行了硬编码):
在 go 中,我有以下代码,旨在匹配上面的 JS 代码(req 是一个带有来自 JSON 请求正文的字符串的结构):
此代码以crypto/rsa: input must be hashed message
. 如果我更改为 usinghash[:]
而不是b
in rsa.VerifyPKCS1v15
,则会失败并显示crypto/rsa: verification error
. 我认为我需要结合的原因authenticatorData
是hash
因为这就是 C# 和 PHP 示例代码中发生的事情(cf, https : //github.com/adrianba/fido-snippets/blob/master/csharp/app.cs,https ://github.com/adrianba/fido-snippets/blob/master/php/fido-authenticator.php)。
也许 Go 有不同的方式?
我已经在 JS 和 Go 中打印了字节数组,并验证了、clientData
和 (以及后两者的组合数组)具有完全相同的值。创建公钥后,我无法从 JS 中提取 n 和 e 字段,因此我创建公钥的方式可能存在问题。signatureData
authenticatorData
hash
credential-manager - 导航器凭据创建方法返回异常
尝试在 Firefox Nightly 下运行可用的 webautn 规范 ( https://www.w3.org/TR/webauthn/ )演示 ( https://github.com/molekilla/webauthn-demo-fork )。
每当执行到达 return 语句时,Promise 将保持挂起几秒钟并最终拒绝,记录[Exception... "Abort" nsresult: "0x80004004 (NS_ERROR_ABORT)" location: "<unknown>" data: no]
或UnknownError: The operation failed for an unknown transient reason
。两个对象看起来都很好。关于它无法解决的原因的任何想法?
fido-u2f - 如何与现有的注册/登录功能保持 FIDO 兼容
我有具有注册和登录功能的现有网站。我想让这个过程 FIDO 符合 UAF / U2F 和后来的 FIDO2 的实现。不幸的是找不到一步一步的系列教程。我想用 PHP 来实现这个。
javascript - 有没有办法使用 Web 身份验证 API (WebAuthn) 为 U2F 设备获取稳定的唯一标识符?
我想建立一个身份验证系统,用户不能提供任何信息(没有用户名、电子邮件等),只需使用他们的 U2F 设备来识别自己并进行身份验证。
从查看Web Authentication API可以看出,每次调用create()或get()时,U2F 设备似乎都会创建一个新的公钥。
有没有办法从可用于识别的 U2F 设备中获取稳定的 id?
authentication - 为什么 Google 在重定向到此 URL 之前不会要求用户授予权限?
我已经设置了一个 Google OAuth 客户端应用程序并获得了 client_ID 和密钥。请参阅下面的屏幕截图。
现在,当访问我的网站的访问者单击“使用 Google 登录”徽章时,他们会被发送到此 URL:
当用户点击那里时,我希望谷歌会弹出一个像这样的权限授予窗口。然而,这不会发生!当用户单击该链接时,它不会要求他们授予权限。它只是将它们发送到redirect_uri
并在其末尾添加代码。
为什么?这不是安全漏洞吗?为什么在没有用户授予权限的情况下发布代码?
authentication - 智能手机作为 WebAuthn 中的身份验证器
我想知道如何在 WebAuthn 中将智能手机用作身份验证器,是否有任何现场演示可以帮助我更多地了解该技术!先感谢您
authentication - 使用 WebAuthn 在桌面浏览器中自动进行身份验证
在 Google I/O '18 上展示了一个演示,其中用户只需提供指纹即可在 PayPal 进行身份验证(参见YouTube 24:40)。这是在智能手机上运行的浏览器中完成的,该智能手机具有指纹传感器并要求浏览器实现 WebAuthn 标准。指纹解锁用于质询-响应身份验证并存储在身份验证器上的私钥。
据我了解,可以通过将userVerification
参数设置为discouraged
(参见w3.org )来禁用用户交互(即要求指纹)。用户将自动登录。
这个流程是否也可以在没有任何额外硬件的情况下在桌面浏览器上实现?浏览器中是否有可用于此的默认身份验证器?
具体来说,我想这样做:
- 通过 WebAuthn 在桌面浏览器中注册公钥/私钥对,以便无法通过 JavaScript 访问私钥(例如,缓解 XSS 攻击)
- 每次将数据发送到服务器时,通过 WebAuthn API 使用存储在“默认”身份验证器中的私钥对数据进行签名,而无需用户交互
authentication - 如何在没有密钥卡的情况下使用 webauthn
我已经在各种 webauthn 示例上尝试了我的 firefox 62 和 chromium,但我无法让它们中的任何一个工作。那些应该在没有特殊硬件的情况下工作吗?我security.webauth.webauthn_enable_softtoken
在about:config
. 虽然我找不到太多关于它到底做什么的文档。webauthn 是否应该在没有特殊硬件的情况下工作?
javascript - 如何创建一个类似于 WebAuthN 的 ArrayBuffer 的 JavaScript ArrayBuffer?
我目前正在为WebAuthN(FIDO U2F、FIDO2)集成编写一个概念验证 Web 应用程序。
返回字段的数据类型cred.rawId
为ArrayBuffer
。在 Chromes 的开发者控制台中,该字段如下所示:
当我尝试重现这个 ArrayBuffer 时,我得到了这样的结果:
注意“其他表示”(例如[[Int8Array]]
),它们都被清零了!此外,我的 ArrayBuffer 看起来像一个普通数组,而在第一个原始屏幕截图中(以这种方式)未显示数据。
这是rawId
从存储的 Base64 表示中检索的源代码(记住:PoC 状态):
Base64 类来自Nick Galbreaths 的 Base64 for JavaScript implementation。
当前rawId
可能有效,但是我想 100% 重现它,以便在将来的某个浏览器版本中将它在其他浏览器中失败的可能性降到最低。
如何实现 Chrome 屏幕截图中显示的表示?
pki - FIDO - FIDO 服务器如何在注册阶段/仪式期间验证入站公钥的完整性?
试图将我的头包裹在 FIDO 协议套装上。
前提
- Authenticator 有一个主私钥(也称为 attestation key)
- 在注册仪式期间,验证者签署挑战和其他几个参数以及新生成的公钥,并通过 WebAuthN 协议将其发送到 FIDO 通用服务器。并且生成的私钥存储在本地的身份验证器中。
问题
- FIDO服务器如何验证authenticator生成的公钥的完整性(简单地说服务器如何验证证书链回信任根)?这是假设身份验证器和 Web 客户端之间存在中间人攻击的范围。
- 服务器是否内置了相应的认证密钥/主私钥的公钥(复制CA模型)?
- 如果是这样,所有的 fido 身份验证器在创建时是否都具有相同的主密钥(无论是软件模块还是硬件模块)?如果不是,制造商和 FIDO 服务器如何跟上正在创建和部署的大量物理身份验证器和软件模块?