无法从 JavaScript 理解 WebAuthn API 错误

Cod*_*ine 3 javascript django cbor yubico webauthn

我目前正在为 Django 构建一个 AJAX 注册端点,以允许 FIDO2 身份验证(物理硬件密钥登录)。这是来自Yubico 官方 fido2 python 库的示例/文档。

唯一的依赖项是cbor.jsjs-cookie。服务器端的一切现在都在工作,但是,我在调用该navigator.credentials.create方法时不断收到此 JavaScript 错误

TypeError: Failed to execute 'create' on 
'CredentialsContainer': The provided value is not of 
type '(ArrayBuffer or ArrayBufferView)'
Run Code Online (Sandbox Code Playgroud)

编码:

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...
Run Code Online (Sandbox Code Playgroud)

我想不通。你知道怎么回事吗?谢谢!

Enr*_*aud 6

我遇到了同样的问题,原因是 /register/begin 响应中从服务器发送的某些数据必须格式化为字节字符串而不是 unicode 字符串。特别是,我发现 user_id 和凭证 ID 必须是字节字符串 - 假设您也在服务器中遵循 Yubico 的示例,在 python 3 中实现。

另外值得注意的是,在这种情况下,我发现 Firefox 的错误消息比 chome 的有用得多。