Credentials
Credentials — это виртуальный аутентификатор WebAuthn, область действия которого ограничена BrowserContext. Он позволяет тестам регистрировать ключи доступа (passkey) и обрабатывать процедуры navigator.credentials.create() / navigator.credentials.get() на странице без реального аутентификатора или аппаратного ключа безопасности.
Существует три распространённых способа его использования:
Использование: предварительное добавление известных учётных данных
BrowserContext context = browser.newContext();
// Ключ доступа, который ваш бэкенд уже подготовил для тестового пользователя.
context.credentials().create("example.com", new Credentials.CreateOptions()
.setId(knownCredentialId) // base64url
.setUserHandle(knownUserHandle) // base64url
.setPrivateKey(knownPrivateKey) // base64url PKCS#8 (DER)
.setPublicKey(knownPublicKey)); // base64url SPKI (DER)
context.credentials().install();
Page page = context.newPage();
page.navigate("https://example.com/login");
// На вызов navigator.credentials.get() со страницы возвращается предварительно добавленный ключ доступа.
Использование: получение учётных данных и их повторное использование
// Подготовительный тест: разрешаем приложению зарегистрировать ключ доступа, а затем сохраняем его.
BrowserContext context = browser.newContext();
context.credentials().install();
Page page = context.newPage();
page.navigate("https://example.com/register");
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Create a passkey")).click();
// Получаем ключ доступа, зарегистрированный страницей, — он включает закрытый ключ.
VirtualCredential credential = context.credentials().get(
new Credentials.GetOptions().setRpId("example.com")).get(0);
Files.writeString(Paths.get("playwright/.auth/passkey.json"), new Gson().toJson(credential));
// Последующий тест: предварительно добавляем сохранённый ключ доступа, чтобы он уже был зарегистрирован в приложении.
VirtualCredential credential = new Gson().fromJson(
Files.readString(Paths.get("playwright/.auth/passkey.json")), VirtualCredential.class);
BrowserContext context = browser.newContext();
context.credentials().create(credential.rpId, new Credentials.CreateOptions()
.setId(credential.id)
.setUserHandle(credential.userHandle)
.setPrivateKey(credential.privateKey)
.setPublicKey(credential.publicKey)
.setSignCount(credential.signCount));
context.credentials().install();
Page page = context.newPage();
page.navigate("https://example.com/login");
// navigator.credentials.get() возвращает сохранённый ключ доступа — вход выполнен.
Использование: сохранение учётных данных в состоянии хранилища и последующее восстановление
Примеры сохранения и восстановления состояния хранилища приведены в руководстве по аутентификации.
Значения по умолчанию
Методы
create
Добавлено в: v1.61Предварительно добавляет виртуальные учётные данные WebAuthn и возвращает их.
Если указан только rpId, генерирует новую пару ключей ECDSA P-256, идентификатор учётных данных и идентификатор пользователя (user handle). Добавленные учётные данные являются обнаруживаемыми (резидентными), поэтому страница может получать их как в сценариях с вводом имени пользователя перед использованием ключа доступа, так и в сценариях использования ключа доступа без ввода имени пользователя. Возвращаемый объект содержит закрытый и открытый ключи, поэтому его можно сохранить на диск и предварительно добавить в последующем тесте.
Чтобы импортировать известные учётные данные, укажите все четыре параметра одновременно: setId, setUserHandle, setPrivateKey и setPublicKey. Также передайте setSignCount, чтобы продолжить отсчёт со значения счётчика подписей, которое доверяющая сторона уже получила.
Вызовите Credentials.install() перед переходом на страницу, использующую WebAuthn.
Использование
Credentials.create(rpId);
Credentials.create(rpId, options);
Аргументы
-
Идентификатор доверяющей стороны (обычно фактический домен сайта).
-
optionsCredentials.CreateOptions(необязательно)-
Идентификатор учётных данных в кодировке base64url. Если не указан, генерируется автоматически.
-
setPrivateKeyString (необязательно)#Закрытый ключ в формате PKCS#8 (DER), закодированный в base64url. Если не указан, генерируется автоматически.
-
setPublicKeyString (необязательно)#Открытый ключ в формате SPKI (DER), закодированный в base64url. Если не указан, генерируется автоматически.
-
setSignCountint (необязательно) Добавлено в: v1.64#Начальное значение счётчика подписей. Счётчик увеличивается на единицу при каждом успешном подтверждении аутентификации через
navigator.credentials.get(), поэтому первое подтверждение сообщает значениеsignCount + 1. По умолчанию —0. -
setUserHandleString (необязательно)#Идентификатор пользователя (user handle) в кодировке base64url. Если не указан, генерируется автоматически.
-
Возвращает
- Create#
-
idStringИдентификатор учётных данных в кодировке base64url.
-
rpIdStringИдентификатор доверяющей стороны.
-
userHandleStringИдентификатор пользователя (user handle) в кодировке base64url.
-
privateKeyStringЗакрытый ключ в формате PKCS#8 (DER), закодированный в base64url.
-
publicKeyStringОткрытый ключ в формате SPKI (DER), закодированный в base64url.
-
signCountintСчётчик подписей: значение, переданное доверяющей стороне в последнем подтверждении аутентификации.
-
delete
Добавлено в: v1.61Удаляет учётные данные из аутентификатора по их идентификатору. Работает с любыми учётными данными, которые в данный момент хранятся в аутентификаторе, — как с предварительно добавленными через Credentials.create(), так и с теми, которые страница зарегистрировала самостоятельно вызовом navigator.credentials.create().
Использование
Credentials.delete(id);
Аргументы
Возвращает
get
Добавлено в: v1.61Возвращает все учётные данные, которые в данный момент хранятся в аутентификаторе, с возможностью фильтрации по setRpId или setId. Сюда входят как учётные данные, предварительно добавленные через Credentials.create(), так и учётные данные, которые страница зарегистрировала самостоятельно вызовом navigator.credentials.create().
Каждый возвращаемый объект учётных данных содержит закрытый и открытый ключи, а также текущее значение счётчика подписей. Поэтому ключ доступа, только что зарегистрированный приложением, можно сохранить и предварительно добавить в последующем тесте с помощью Credentials.create() — см. второй пример в обзоре класса.
Использование
Credentials.get();
Credentials.get(options);
Аргументы
optionsCredentials.GetOptions(необязательно)
Возвращает
install
Добавлено в: v1.61Устанавливает виртуальный аутентификатор WebAuthn в контекст, переопределяя navigator.credentials.create() и navigator.credentials.get() на всех текущих и будущих страницах. Вызовите этот метод до первого обращения страницы к navigator.credentials.
Обязательный вызов: пока не вызван Credentials.install(), перехват не выполняется и страница использует встроенную реализацию WebAuthn платформы (либо WebAuthn остаётся недоступным, если такой реализации нет). Предварительное добавление учётных данных через Credentials.create() без установки аутентификатора заполняет его, но страница никогда не получит доступ к этим учётным данным.
Использование
Credentials.install();
Возвращает