Связывание нескольких открытых ключей с пользователем webauthn

#webauthn

#webauthn

Вопрос:

Я реализую webauthn как доказательство концепции.

Я хочу, чтобы мои пользователи могли входить в систему, используя несколько разных аутентификаторов «платформы». Например, Windows Hello на их настольном компьютере и Face ID на их iPhone. У каждого аутентификатора будет свой собственный открытый ключ, который он отправляет RP, который я сохраню в базе данных.

Когда пользователю приходит время для входа в систему (вызова navigator.credentials.get() ), как я узнаю на сервере (RP), какой открытый ключ использовать? Или я должен просто попробовать их все?

Наличие нескольких устройств для одного пользователя, по-видимому, является поддерживаемым сценарием в соответствии с https://www.w3.org/TR/webauthn/#usecase-new-device-registration поэтому я предполагаю, что существует какой-то официальный или рекомендуемый способ реализации этого.

Итак, если у пользователя связано несколько открытых ключей, как мне узнать, какой из них использовать при проверке подписи входа / утверждения?

Ответ №1:

Когда пользователю приходит время для входа в систему (вызывая navigator.credentials.get()), как я узнаю на сервере (RP), какой открытый ключ использовать? Или я должен просто попробовать их все?

Вы все поняли правильно, вы должны попробовать их все одновременно. Вот почему allowCredentials это список, вы можете включить несколько идентификаторов. В ответе будет указано, какой из них был выбран.

Комментарии:

1. Я согласен с этим ответом. Этот параметр — правильный путь.

Ответ №2:

В структуре authData есть поле «подтвержденные учетные данные». В это поле вложено поле «идентификатор учетных данных». Вы должны сохранить это вместе с открытым ключом, проанализированным из той же структуры.

Объект аттестации (Рисунок скопирован из:https://www.w3.org/TR/webauthn/#attestation-object )

Позже, при выполнении входа в систему, вы получите id поле (и rawId ) от navigator.credentials.get() . Этот идентификатор будет соответствовать «идентификатору учетных данных», указанному ранее, и поэтому может использоваться для поиска правильного открытого ключа для использования.