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

javascript - 在 webauthn 中计算签名验证的哈希值

我正在尝试实现 webauthn,但无法让签名验证正常工作。根据https://w3c.github.io/webauthn/#verifying-assertion我必须基本上验证以下数据的签名:

身份验证数据 || sha256(clientDataJSON)

authData 和 sha256 哈希应该是“二进制连接的”。我不知道它们到底是什么意思,但我认为它们只是意味着将字节彼此相邻,但不知道究竟是什么“二进制”。

因此,给定一个名为 attestation 的 PublicKeyCredential,我可以生成生成签名的数据,如下所示:

我当然尝试过直接验证这个“签名”值,我也尝试过散列它。他们都没有验证。我在计算签名的数据时做错了什么?

我在服务器端(在 C++ 中)有相同的代码,我在其中构建相同的值,然后使用 OpenSSL 验证它。这个签名的计算只是为了显示我在做什么——我当然不会相信服务器端的那个值。

0 投票
1 回答
665 浏览

google-chrome-extension - Chrome 扩展中的 Auth0 通用登录

我正在尝试使用该auth0-chrome软件包对我的用户进行身份验证。我遵循了他们的“使用库”部分(在我的租户中设置了一个新的本机类型应用程序并配置了Allowed Callback URLsAllowed Origins)。将我的事件发送到我的后台脚本并在新实例上authenticate调用该方法时,出现错误authenticate()Auth0Chrome

我目前的理论是,由于示例中允许的来源格式是https://<extension-id>.chromiumapps.org并且我目前无法访问该页面。Chrome 扩展是否有一定的可见性级别才能拥有有效的 URL(例如,私有发布扩展的 atm,*.chromiumapp.orgURL 无效)。

我认为不需要代码示例,因为我实际上是在使用默认示例的代码并替换了我的扩展 ID。

我已经仔细检查了,我的 auth0 应用程序配置、我在浏览器中解压的扩展程序和配置的代码的 ID 相同。如果扩展 ID 具有任何值,我正在使用清单密钥来保存扩展 ID。

0 投票
1 回答
80 浏览

google-chrome - webauthn:如何将我的手机链接到我的计算机浏览器

网络身份验证标准即将推出,它在我的手机上运行良好。

但是,当我在计算机上尝试浏览器时,我得到了

设备不兼容

我想我们应该能够以某种方式将我们的手机与浏览器链接起来,这样手机就会得到提示……我们该怎么做呢?

一个很酷且制作精良的演示:https ://webauthn.me/

2019 年 9 月编辑:我也喜欢https://webauthn.io/

0 投票
0 回答
45 浏览

authentication - Web Authn 和 Feathers 有什么想法吗?

由于 Web Authn 刚刚被 W3C 批准为标准,是否有人正在研究羽毛来管理这种类型的身份验证?谢谢

0 投票
1 回答
1171 浏览

javascript - 跨多个子域的 WebAuthn

我正在尝试在我的网站上设置 WebAuthn 身份验证流程,但遇到了一个问题。我希望我的用户能够在主网站 (www.domain.com) 上注册他们的设备,以便通过他们的用户设置轻松访问。身份验证本身通过 IdP (sso.domain.com) 在不同的子域上进行。这就是麻烦开始的地方。

我尝试了几件事:

  • 在 www.scoutswechel.be 上注册和认证,将“www.scoutswechel.be”作为 rp.id 传递给两个 => 作品。
  • 在 www.scoutswechel.be 上注册,在 sso.scoutswechel.be 上进行身份验证,将“www.scoutswechel.be”作为两者的 rp.id 传递 => 身份验证步骤失败,因为身份验证器不返回任何密钥。
  • 在 www.scoutswechel.be 上注册,在 sso.scoutswechel 上进行身份验证,分别将这些域作为 rp.id => 身份验证步骤失败,因为身份验证器不返回任何密钥。
  • 在 www.scoutswechel.be 上注册,在 sso.scoutswechel.be 上进行身份验证,将“scoutswechel.be”作为 rp.id 传递给这两个 => 注册步骤已经失败,不同浏览器的错误不同(例如,“密钥返回了意外的东西 (2) ' 在铬)。

如果我正确理解规范,传递“scoutswechel.be”实际上应该可以工作,因为两个域都是主域的子域(如果我在这里错了,请纠正我)。

我用 PHP 准备我的挑战,并通过 ajax 调用将它们传递给页面。例如,我的 PHP 脚本返回以下值:

然后我将挑战和 user.id 转换为 Uint8Array 并将公钥部分传递给:

我该怎么办?我可以将哪些值传递给 rp.id 以使其在两个子域中工作?

0 投票
0 回答
178 浏览

google-chrome - 在 FIDO2 凭证获取期间单击浏览器弹出窗口上的取消按钮时,Chrome 和 Firefox 返回不同的错误

当我在对话框上单击取消时

Chrome 返回 NotAllowedError,但 Firefox 返回 AbortError

在此处输入图像描述

W3C Webauthn 文档中,它说以下内容

18. 当lifetimeTimer 没有过期时,根据lifetimeTimer 以及authenticators 中每个authenticator 的状态和响应执行以下操作:

-> 如果lifetimeTimer 过期,对于issuedRequests 中的每个验证器调用验证器上的authenticatorCancel 操作并从issuedRequests 中删除验证器。

-> 如果用户执行用户代理用户界面选项来取消进程,对于发出请求中的每个认证者调用认证者上的认证者取消操作并从发出请求中删除认证者。返回名称为“NotAllowedError”的 DOMException。

-> 如果存在信号成员并且 aborted 标志设置为 true,则对于发出请求中的每个验证器,调用验证器上的验证器取消操作,并从发出请求中删除验证器。然后返回一个名为“AbortError”的 DOMException 并终止该算法。...

我认为取消总是返回 NotAllowedError 。

是火狐浏览器的bug吗?还是我错过了什么?

我将以下参数navigator.credentials作为选项

  • 挑战
  • 允许凭据
  • 需要用户验证/首选
0 投票
2 回答
1497 浏览

angular - Angular + webauthn =“导航器”类型上不存在属性“凭据”?

我一直在尝试将 webauthn 添加到 Angular 应用程序中。此 MDN 页面概述了必要的步骤:https ://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API

重要的是使用 API 需要访问navigator.credentials. 但是,当我尝试引用它时,Angular 不会编译。例如,这行代码:

...产生此错误:

现在我知道我可以做这样的事情:

但是为整个CredentialsContainerAPI 编写所有的 TypeScript 真的很乏味。此外,有人已经完成了所有这些工作DefinitelyTyped,对吧?

所以我添加@types/webappsec-credential-management到我的项目中npm install --save-dev @types/webappsec-credential-management

现在 Visual Studio Code 知道该做什么了;我有自动完成和一切。

但是 Angular 仍然无法编译。它给出了与上面相同的错误。

我需要做什么才能让 Angular 识别navigator.credentials

0 投票
2 回答
995 浏览

javascript - WebAuthn 检索公钥和凭证 ID

我已按照本教程https://webauthn.guide/#registration

我正在使用 yubico nfc 密钥,我几乎设法注册了安全密钥。我从服务器发送一个随机字节质询来注册密钥和其他数据。

当我注册密钥时,我设法解码了 clientDataJson 和身份验证响应以检索大量信息。但是,我无法弄清楚如何处理 credentialId 和 authData 缓冲区,我尝试对它们进行解码、解密,但我总是得到一些奇怪的数据,而且没有任何东西看起来像 credentialId 或公钥。

这是我到目前为止得到的代码

最后,我不知道如何处理公钥对象和credentialId。解压似乎没用。

任何想法 ?

0 投票
1 回答
1357 浏览

webauthn - 如何检测浏览器是否支持 webauthn

Webauthn 目前仅在有限数量的设备中支持https://caniuse.com/#search=webauthn

在 JavaScript 中,我希望能够在向用户提供登录或加入表单之前检测用户浏览器是否支持。

检查 navigator.credentials 似乎有效,但它是检查这种支持的正确方法吗?

0 投票
1 回答
69 浏览

bluetooth - 为什么 Fido 在网络蓝牙中被阻止而不是 USB

由于系统范围的配对导致 FIDO 在网络蓝牙中被阻止会带来安全风险[来源],我可以理解但不完全确定为什么要扩展来阻止它。一个好的 ble 令牌设计可以克服这个问题(令牌上的按钮......等)。

但是当涉及到usb令牌时,为什么不将其视为相同级别的风险[来源]并阻止访问,usb系统范围的配对也不是吗?