问题标签 [fido-u2f]
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.
c++ - 从本机代码返回到托管会破坏返回的对象
我正在尝试使用 C++/CLI 和 yubico 的 libu2f-host( https://github.com/Yubico/libu2f-host )在我的 WPF 程序中构建 U2F 身份验证的实现我的 C++/CLI中有一个完全原生的函数dll 调用适当的 libu2f 函数,然后返回一个指向 u2f_reply(我自己的类)的指针,其中包含响应和错误代码。但是,当 dll 的托管部分接收到此对象时,响应代码仍然正确,但响应字符串似乎已完全损坏。
我尝试立即返回 char 指针,然后使用 marshal 将其转换为托管字符串,并且我尝试使用标准 C# 字符串。我尝试使用 memcpy 将响应复制到 reply->response 但没有运气。
我希望它返回一个带有响应数据的 json 对象,如下所示:https://developers.yubico.com/libu2f-host/,但我得到一个随机的 ASCII 字符字符串(不能在这里粘贴)并且没有错误
javascript - 在 Cypress 中模拟 U2F 令牌以自动测试 Web 登录
我想在 Cypress + TS 上自动登录使用 U2F 和 USB 安全密钥的网站。我的脚本应该模拟密钥并将其传递给浏览器。
现在我一直在使用https://github.com/github/SoftU2F这是一个很好的解决方案,但在测试运行时仍然需要有人在场。
试图申请:https ://www.npmjs.com/package/virtual-u2f但是,虽然它正确生成密钥,但似乎没有任何东西传递给浏览器。
有没有人在 Js/Ts 上自动化那个登录之王?将不胜感激任何想法
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 并返回移动网络。只需拉出我们的钥匙并发出嗡嗡声就更好了。
感谢您的帮助,凯文
javascript - 能够注册和签署多个 Fido U2F 安全密钥
如何添加在网站/应用程序上注册和签署多个安全密钥的功能
javascript - 如何通过 Chrome 扩展替换 navigator.credentials.create 请求或响应参数?
我正在开发一个 chrome 扩展来修改来自 Web 服务的 U2F 创建请求参数。是否可以通过 Chrome 扩展替换navigator.credentials.create
请求或响应参数?我找不到与此相关的资源。任何指针都会有所帮助。
特别是,当用户为网站注册 U2F 时,它会调用浏览器 Web API navigator.credentials.create,后者又会联系硬件令牌并返回响应。我想修改navigator.credentials.create
网页调用的 API 的请求和响应。
javascript - 使用 Webauthn 防止弹出窗口出现
在实现使用Webauthn协议以允许用户使用 U2F 密钥注册和登录的服务时,它始终会显示一个弹出窗口。我发现用户体验不是很好,因为弹出窗口覆盖了我试图引导用户的区域。
我发现这种用户体验更好:https ://mdp.github.io/u2fdemo
答案可能是“否”,但也许我错过了:是否可以使用 Webauthn 控制用户体验?具体来说,可以防止弹出窗口出现吗?
android - 使用 Xamarin 在 Android 上的 FIDO2
我们有一个使用 Xamarin 和 webview 的 android 应用程序。我们的客户使用该应用程序连接到他们自己的服务器,并希望使用 FIDO2 无密码登录;他们目前使用用户名和密码。
有解决方案吗?到哪里去寻找这个问题的答案?
webauthn - 为什么网络钓鱼网站会要求用户通过 webauthn,而不是直接要求用户名/密码?
我知道 FIDO webauthn 协议是网络钓鱼证明,但为什么网络钓鱼网站会要求用户通过 webauthn,而不是它可以明确要求用户名/密码。
我试图暗示的是,只有当它在其所有身份验证端点上完全启用 FIDO 时,FIDO 才是服务的网络钓鱼证明。如果它在少数端点上具有 FIDO,但甚至有一个端点是单因素的,那么您仍然容易受到网络钓鱼的影响。我的理解是,当 FIDO 说它的网络钓鱼证明时,这意味着即使攻击者掌握了您的凭据,它也是无用的,因为他们仍然必须使用 FIDO 密钥来访问该帐户。而且由于单因素端点暴露了这一点,除非您完全使用 FIDO,否则您不是网络钓鱼证明。我的理解正确吗?
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 字节)初始化
这似乎不一致。假设我是example.com
,并且我很早就采用了 U2F 第二因素身份验证。我的应用程序 ID是https://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?我肯定错过了什么。