Типы учётных данных
API управления учётными данными позволяет веб-сайту создавать, хранить и извлекать учётные данные, которые позволяют пользователю безопасно войти в систему. Он поддерживает четыре разных типа учётных данных:
| Тип | Интерфейс |
|---|---|
| Пароль | PasswordCredential |
| Федеративная идентификация |
IdentityCredential, FederatedCredential (устаревший) |
| Одноразовый пароль (OTP) | OTPCredential |
| Веб-аутентификация | PublicKeyCredential |
Все типы учётных данных представлены как подклассы интерфейса Credential:
В этом руководстве мы рассмотрим различные типы учётных данных и объясним, как они используются.
Примечание: Хотя мы описываем все типы учётных данных вместе, разные типы учётных данных определены в нескольких разных спецификациях, которые расширяют основную спецификацию API управления учётными данными.
- API управления учётными данными определяет пароли и устаревшие федеративные учётные данные.
- API федеративного управления учётными данными определяет новые федеративные учётные данные.
- API WebOTP определяет учётные данные OTP.
- API веб-аутентификации определяет утверждения веб-аутентификации.
Пароли
Примечание: Большинство браузеров не поддерживают этот тип учётных данных, и он не широко используется в сети. Вместо этого браузеры автоматически предлагают сохранить пароли в менеджере паролей и могут автоматически извлекать сохранённые пароли для автоматического заполнения элементов ввода пароля.
Современные браузеры предоставляют пользователям менеджер паролей, который позволяет пользователям сохранять введённые ими пароли на веб-сайтах и впоследствии извлекать их при необходимости повторного входа в систему. Менеджеры паролей могут повысить безопасность паролей, запоминая пароли для пользователей и автоматически заполняя их, что позволяет пользователям выбирать более надёжные пароли.
В API управления учётными данными пароль представлен интерфейсом PasswordCredential. Когда пользователь успешно зарегистрируется или войдёт в вашу систему, вы можете вызвать конструктор PasswordCredential() или navigator.credentials.create(), чтобы создать объект PasswordCredential из учётных данных, введённых пользователем. Затем вы можете передать его в navigator.credentials.store(), и браузер спросит пользователя, хочет ли он сохранить пароль в менеджере паролей.
Когда пользователь посещает ваш сайт, вы можете вызвать navigator.credentials.get(), чтобы извлечь сохранённый пароль для вашего сайта и использовать его для входа пользователя в систему. В зависимости от ситуации вы можете войти в систему без взаимодействия с пользователем или использовать полученный пароль для автоматического заполнения поля формы.
Федеративные учётные данные
В системе федеративной идентификации отдельное предприятие выступает посредником между пользователем и веб-сайтом, в который он пытается войти. Это предприятие, называемое провайдером идентификации (IdP), управляет учётными данными пользователя, может аутентифицировать пользователей и доверяется веб-сайту для предоставления утверждений об идентификации пользователя.
У пользователя есть учётная запись в IdP: когда ему нужно войти на веб-сайт, он проходит аутентификацию в IdP. Затем IdP возвращает маркер в браузер пользователя, который браузер предоставляет веб-сайту. Веб-сайт проверяет маркер и, если проверка успешна, вводит пользователя в систему.
Федеративная идентификация часто предоставляется как услуга корпорациями: например, пользователи, у которых есть учётные записи Google, Microsoft или Facebook, могут использовать их для входа на веб-сайты, которые их поддерживают.
API федеративного управления учётными данными определяет механизм защиты конфиденциальности для федеративной идентификации в сети. Вы начинаете с вызова navigator.credentials.get() для запроса федеративных учётных данных, и это запускает обмен протоколами между браузером и IdP.
Если в ходе этого обмена пользователь может быть аутентифицирован в IdP, браузер возвращает объект IdentityCredential в соответствии с Promise возвращённым от get(). Код веб-интерфейса сайта может отправить его на сервер для проверки.
Обратите внимание, что create() и store() не используются при работе с API федеративного управления учётными данными.
Примечание: Поддержка федеративной идентификации в API управления учётными данными изначально предоставлялась через интерфейс FederatedCredential. Однако этот механизм зависит от таких технологий, как куки сторонних сайтов, которые по своей природе нарушают конфиденциальность. Эти технологии были устаревшими в браузерах, поэтому потребовался новый подход.
Одноразовые пароли
Одноразовый пароль (OTP) — это метод аутентификации, при котором веб-сайт отправляет пользователю уникальный код через систему обмена сообщениями, такую как электронная почта или SMS. Пользователь должен затем ввести код на сайте, чтобы подтвердить свой контроль над точкой обмена сообщениями. Веб-сайты иногда используют это в качестве второго фактора аутентификации в дополнение к паролю.
API WebOTP определяет интерфейс OTPCredential, который решает конкретную проблему удобства использования в этом обмене: когда пользователь получает код, ему нужно открыть другое приложение, найти сообщение, а затем скопировать код в форму на веб-сайте. Это неудобно, особенно на мобильном устройстве, и особенно когда устройство, принимающее сообщение, такое же, как устройство, используемое для входа на сайт.
В браузерах, поддерживающих тип OTPCredential, веб-интерфейс сайта может вызвать navigator.credentials.get(), запросив учётные данные OTP, а затем попросить бэкенд сгенерировать код и отправить сообщение, содержащее его (только SMS поддерживается в качестве транспорта). Бэкенд должен отправить SMS-сообщение в специальном формате, которое браузер может прочитать.
Затем браузер возвращает объект OTPCredential в выполнении Promise возвращённого от get(), и этот объект содержит код. Веб-интерфейс сайта может использовать код для автоматического заполнения элемента ввода на сайте или автоматически отправить код на сервер.
Обратите внимание, что create() и store() не используются при работе с учётными данными OTP.
Утверждения веб-аутентификации
API веб-аутентификации (WebAuthn) позволяет пользователям входить на веб-сайты, запрашивая у аутентификатора цифровые подписанные утверждения об идентификации пользователя.
Аутентификатор — это сущность, которая находится внутри или прикреплена к устройству пользователя и может выполнять криптографические операции, необходимые для регистрации и аутентификации пользователей и безопасного хранения криптографических ключей, используемых в этих операциях. Аутентификатор может быть интегрирован в устройство, например, система Touch ID на устройствах Apple или система Windows Hello, или это может быть съёмный модуль, например, YubiKey.
Вместо паролей WebAuthn использует криптографию с открытым ключом для аутентификации пользователей.
Для регистрации пользователя на веб-сайте с помощью WebAuthn вызовите navigator.credentials.create(), предоставив всю необходимую информацию для создания пары ключей. Аутентификатор может сначала попросить пользователя пройти аутентификацию, например, используя биометрический считыватель. Затем он сгенерирует пару ключей и вернёт открытый ключ. Эта пара ключей специфична для пользователя и веб-сайта. Аутентификатор также может сгенерировать и вернуть подписанную аттестацию: это заявление о том, что сам аутентификатор (например) является подлинным YubiKey.
Веб-интерфейс сайта отправляет открытый ключ и аттестацию на сервер, который проверяет аттестацию и сохраняет открытый ключ с остальной информацией о новой учётной записи пользователя.
Для входа пользователя в веб-сайт код веб-интерфейса сначала извлекает случайное число с сервера, называемое вызовом. Затем он вызывает navigator.credentials.get(), передавая вызов и некоторые другие параметры. Аутентификатор может снова сначала попросить пользователя пройти аутентификацию, а затем подписать вызов с использованием закрытого ключа.
Затем браузер возвращает объект PublicKeyCredential в выполнении Promise возвращённого от get(), и этот объект содержит подписанный вызов, который называется утверждением. Веб-интерфейс сайта затем отправляет утверждение на сервер, который проверяет подпись с использованием сохранённого открытого ключа и определяет, следует ли вводить пользователя в систему.
Обратите внимание, что store() не используется при работе с WebAuthn: пара ключей создаётся в аутентификаторе, и закрытый ключ никогда из него не выходит.
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Credential_Management_API/Credential_types