#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()
. Этот идентификатор будет соответствовать «идентификатору учетных данных», указанному ранее, и поэтому может использоваться для поиска правильного открытого ключа для использования.