Я всегда получал какие-то странные данные и ничего похожего на идентификатор доступа или открытый ключ.
Это потому, что оба являются байтовыми последовательностями.
credentialId
, который вы проанализировали с authData
, представляет собой строку случайных байтов (обычно длиной 96 байт), генерируемых ключом U2F, поэтому не ожидайте, что они будут иметь смысл.
Переменная 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
}
В конце концов, я не знаю, что делать с объектом открытого ключа и идентификатором credentialId.
Вам понадобится Идентификатор удостоверения * от 1022 * до , идентифицирующий пользователя, который пытается аутентифицироваться на вашем сайте, и от Открытый ключ до проверки его личность.
Вся остальная информация, извлеченная из ответа authData
, должна быть проверена, но нет необходимости сохранять ее, просто сохраните пару credentialId
и publicKeyBytes
.
Этот веб-сайт объясняет процесс аутентификации достаточно подробно: https://webauthn.guide/#authentication
Чтобы узнать, как проверить подпись, перейдите по этой ссылке: https://w3c.github.io/webauthn/#fig-signature