无法理解来自 JavaScript 的 WebAuthn API 错误
Can't understand WebAuthn API error from JavaScript
我目前正在为 Django 构建一个 AJAX 注册端点以允许 FIDO2 身份验证(物理硬件密钥登录)。这是来自 Yubico's official fido2 python library 中的 example/documentation。
唯一的依赖项是 cbor.js
和 js-cookie
。服务器端现在一切正常,但是,我在调用 navigator.credentials.create
方法
时不断收到此 JavaScript 错误
TypeError: Failed to execute 'create' on
'CredentialsContainer': The provided value is not of
type '(ArrayBuffer or ArrayBufferView)'
代码:
var csrftoken = Cookies.get('csrftoken');
fetch('/register/begin', {
method: 'POST',
headers: {
'X-CSRFToken': csrftoken
}
}).then(function(response) {
if(response.ok) {
return response.arrayBuffer();
}
throw new Error('Error getting registration data!');
}).then(CBOR.decode).then(function(options) {
console.log(options)
//This line is not working
return navigator.credentials.create(options);
//More code... complete registration...
我想不通。你知道怎么了吗?谢谢!
我遇到了同样的问题,原因是在/register/begin的响应中从服务器发送的一些数据必须格式化为字节字符串而不是unicode字符串。特别是,我发现 user_id 和凭证 ID 必须是字节字符串 - 假设您也在服务器中遵循 Yubico 的示例,在 python 3.
中实现
另外值得注意的是,在这种情况下,我发现 Firefox 的错误消息比 chome 的更有帮助。
我也遇到了这个问题。我最终使用 TextEncoder class 对挑战和用户 ID 进行编码...
const enc = new TextEncoder();
const createCredentialOptions: CredentialCreationOptions = {
publicKey: {
rp: rp,
challenge: enc.encode(challenge),
user: {
id: enc.encode(user.id),
name: user.name,
displayName: user.displayName
},
pubKeyCredParams: pubKeyCredParams,
...
我目前正在为 Django 构建一个 AJAX 注册端点以允许 FIDO2 身份验证(物理硬件密钥登录)。这是来自 Yubico's official fido2 python library 中的 example/documentation。
唯一的依赖项是 cbor.js
和 js-cookie
。服务器端现在一切正常,但是,我在调用 navigator.credentials.create
方法
TypeError: Failed to execute 'create' on
'CredentialsContainer': The provided value is not of
type '(ArrayBuffer or ArrayBufferView)'
代码:
var csrftoken = Cookies.get('csrftoken');
fetch('/register/begin', {
method: 'POST',
headers: {
'X-CSRFToken': csrftoken
}
}).then(function(response) {
if(response.ok) {
return response.arrayBuffer();
}
throw new Error('Error getting registration data!');
}).then(CBOR.decode).then(function(options) {
console.log(options)
//This line is not working
return navigator.credentials.create(options);
//More code... complete registration...
我想不通。你知道怎么了吗?谢谢!
我遇到了同样的问题,原因是在/register/begin的响应中从服务器发送的一些数据必须格式化为字节字符串而不是unicode字符串。特别是,我发现 user_id 和凭证 ID 必须是字节字符串 - 假设您也在服务器中遵循 Yubico 的示例,在 python 3.
中实现另外值得注意的是,在这种情况下,我发现 Firefox 的错误消息比 chome 的更有帮助。
我也遇到了这个问题。我最终使用 TextEncoder class 对挑战和用户 ID 进行编码...
const enc = new TextEncoder();
const createCredentialOptions: CredentialCreationOptions = {
publicKey: {
rp: rp,
challenge: enc.encode(challenge),
user: {
id: enc.encode(user.id),
name: user.name,
displayName: user.displayName
},
pubKeyCredParams: pubKeyCredParams,
...