- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已遵循本教程 https://webauthn.guide/#registration
我正在使用 yubico nfc key ,我几乎设法注册了安全 key 。我从服务器发送一个随机字节挑战来注册 key 和其他数据。
当我注册 key 时,我设法解码了 clientDataJson 和身份验证响应以检索大量信息。但是我不知道如何处理 credentialId 和 authData 缓冲区,我尝试对它们进行解码、解密,但我总是得到一些奇怪的数据,没有任何东西看起来像 credentialId 或公钥。
这是我目前得到的代码
var createCredentialDefaultArgs = {
publicKey: {
// Relying Party (a.k.a. - Service):
rp: {
name: 'Dummy'
},
// User:
user: {
id: new Uint8Array(16),
name: 'John Doe',
displayName: 'Mr Doe'
},
pubKeyCredParams: [{
type: "public-key",
alg: -7
}],
attestation: "direct",
timeout: 60000,
challenge: new Uint8Array(/* stuff*/).buffer
}
};
$('[data-register-webauthn]')
.on('click', function () {
// register / create a new credential
navigator.credentials.create(createCredentialDefaultArgs)
.then((cred) => {
console.log("NEW CREDENTIAL", cred);
const utf8Decoder = new TextDecoder('utf-8');
const decodedClientData = utf8Decoder.decode(cred.response.clientDataJSON);
// parse the string as an object
const clientDataObj = JSON.parse(decodedClientData);
const decodedAttestationObj = CBOR.decode(cred.response.attestationObject);
const {authData} = decodedAttestationObj;
// get the length of the credential ID
const dataView = new DataView(new ArrayBuffer(2));
const idLenBytes = authData.slice(53, 55);
idLenBytes.forEach(
(value, index) => dataView.setUint8(
index, value)
);
const credentialIdLength = dataView.getUint16();
// get the credential ID
const credentialId = authData.slice(
55, credentialIdLength);
// get the public key object
const publicKeyBytes = authData.slice(
55 + credentialIdLength);
// the publicKeyBytes are encoded again as CBOR
const publicKeyObject = CBOR.decode(
publicKeyBytes.buffer);
console.log(publicKeyObject)
})
.catch((err) => {
console.log("ERROR", err);
});
})
最后,我不知道如何处理公钥对象和credentialId。去冷凝似乎没用。
有什么想法吗?
最佳答案
I always got some strange data and nothing that looks like a credentialId or a public key.
因为都是字节序列。
您从 authData
解析出的 credentialId
是由 U2F key 生成的一串随机字节(通常为 96 字节长),所以不要指望它们有意义.
publicKey
变量有点棘手,因为它是 CBOR 编码的(不是您的常规 PEM 字符串),在 publicKeyObject
中解码后应该会给您一个输出像这样:
{
1: 2, // Ellipic Curve key type
3: -7, // ES256 signature algorithm
-1: 1, // P-256 curve
-2: 0x7885DB484..., // X value
-3: 0x814F3DD31... // Y value
}
In the end, I don't know what to do with the public key object and the credentialId.
您需要凭据 ID 来识别试图针对您的网站进行身份验证的用户,并需要公钥来验证 它的身份。
从 authData
响应中提取的所有其他信息都应该被验证,但没有必要保留它,只需保存 credentialId
和 publicKeyBytes
.
此网站非常详细地解释了身份验证过程:https://webauthn.guide/#authentication
要了解如何验证签名,请查看此链接:https://w3c.github.io/webauthn/#fig-signature
关于javascript - WebAuthn 检索公钥和凭证 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55594680/
Chrome 中提供的虚拟身份验证器扩展 (virtual authenticators tab) 用于在不使用物理身份验证器 key 的情况下测试/调试 FIDO2 Webauthn 身份验证机制。
与显赫demise of the u2f api ,我正在尝试使用 AppId 扩展转移到 WebAuthn API,以支持以前在 U2F 中注册的安全 key 。尽我所能从 reading the
我正在尝试扩展我的应用程序以支持 WebAuthn 登录。到目前为止,我已经在我的本地服务器上成功设置了一个测试应用程序(使用这个 https://github.com/lbuchs/WebAuthn
Webauthn 目前仅在有限数量的设备中受支持 https://caniuse.com/#search=webauthn . 在 JavaScript 中,我希望能够在向用户提供登录或加入表单之前检
Webauthn 目前仅在有限数量的设备中受支持 https://caniuse.com/#search=webauthn . 在 JavaScript 中,我希望能够在向用户提供登录或加入表单之前检
我们有一个带有 PWA 的项目,我们希望在其中实现客户端加密。我们想将 Webauthn 用作与密码相结合的第二个因素。在后台,我们使用随机生成的 key 来加密/解密数据库,该 key 与服务器上的
我正在尝试在我的网站上设置 WebAuthn 身份验证流程,但我遇到了一个问题。我希望我的用户能够在主网站 (www.domain.com) 上注册他们的设备,以便通过他们的用户设置轻松访问。身份验证
我正在尝试实现 webauthn,但无法使签名验证正常工作。根据https://w3c.github.io/webauthn/#verifying-assertion我必须基本上验证以下数据的签名:
我正在测试一个用 go 编写的非常简单的 webauthn 示例,来自 https://github.com/hbolimovsky/webauthn-example当我为主机构建它时,它工作得很好。
我正在测试一个用 go 编写的非常简单的 webauthn 示例,来自 https://github.com/hbolimovsky/webauthn-example当我为主机构建它时,它工作得很好。
我想根据 WebAuthnAPI 在我的混合网络应用程序上实现身份验证. 我现在想做的是,用户也可以在移动设备上通过指纹或 USB 登录。 使用适配器 + USB 手指扫描是否可行,如 this或使用
我已遵循本教程 https://webauthn.guide/#registration 我正在使用 yubico nfc key ,我几乎设法注册了安全 key 。我从服务器发送一个随机字节挑战来注
我不是 Android 开发人员,我一直在做 Android 方面的事情。我希望这里有人可以帮助我。 我正在我的网站上实现 WebAuthn/FIDO2,它在浏览器上运行得非常好。但是当我在我的 an
在最近的 Windows 周年更新中,Edge 现在支持使用 Windows Hello 的生物识别身份验证(参见 https://developer.microsoft.com/en-us/micr
是否可以通过休息工具在本地进行测试。我已经创建了后端来生成用于注册新信用的挑战等,但是如果没有 WebAuthn 响应,如果我创建了正确的方法来消化来自 WebAuthn 的响应对象,我就会不知所措。
我打算使用 WebAuthn 进行身份验证,如演示站点 https://webauthn.io 所示 事实证明,Android 的 WebView(和它的 iOS 对应物)没有实现这一点,并且明确指出
使用 WebAuthN ( https://w3c.github.io/webauthn/ ) 进行身份验证时,是否可以隐藏某些身份验证选项? 例如,在 webauthn.io 上进行测试时,我的 a
在我的用例中,有一个注册页面会触发浏览器特定的 webauthn 流程。例如,在 Mac 上的 Chrome 中,您会看到这一系列的弹出窗口: 在 USB 安全 key 和内置传感器之间选择一个选项
我已经在各种 webauthn 示例上尝试了我的 firefox 62 和 chromium,但我无法使它们中的任何一个工作。那些应该在没有特殊硬件的情况下工作吗?我在 about:config 中激
我正在尝试在我们的登录页面上设置 WebAuthn。我现在需要使用 navigator.credentials.create() 创建公钥。在 Chrome 上,我不断收到以下错误:Uncaught
我是一名优秀的程序员,十分优秀!