В настоящее время я пишу проверочное веб-приложение для интеграции WebAuthN (FIDO U2F, FIDO2).
Тип данных возвращаемого поля cred.rawId
равен ArrayBuffer
.В консоли разработчика Chromes это поле отображается следующим образом:
![Chromes' developer console view on original cred.rawId data](https://i.stack.imgur.com/5kAtf.png)
Когда я пытаюсь воспроизвести этот ArrayBuffer, я получаю следующее:
![Chromes' developer console view on own rawId implementation](https://i.stack.imgur.com/fK7ip.png)
Обратите внимание на «другие представления» (например, [[Int8Array]]
), которые все обнулены!Кроме того, мой ArrayBuffer выглядит как обычный массив, в то время как данные не отображаются (таким образом) на первом оригинальном скриншоте.
Это исходный код (помните: состояние PoC) для получения rawId
из сохраненного представления Base64:
function StringToByteArray(str) {
var bytes = new ArrayBuffer();
for (var i = 0; i < str.length; ++i) {
var code = str.charCodeAt(i);
var _bytes = new ArrayBuffer(bytes.byteLength + 1);
for ( var j = 0; j < bytes.byteLength; j++ ) {
_bytes[j] = bytes[j];
}
_bytes[bytes.byteLength] = code;
bytes = _bytes
}
return bytes;
}
var x_rawId = StringToByteArray(base64.decode(cred.id.replace(/-/g, '+').replace(/_/g, '/').padRight(cred.id.length + (4 - cred.id.length % 4) % 4, '=')));
Класс Base64 из Ника Basebreaths Base64 для реализации JavaScript .
Текущий rawId
может работать, однакоЯ хотел бы воспроизвести его на 100%, чтобы свести к минимуму вероятность его сбоя в другом браузере в какой-либо будущей версии браузера.
Как добиться представления, показанного на скриншоте Chrome?