Credentials
Credentials — это виртуальный аутентификатор WebAuthn, действующий в пределах BrowserContext. Он позволяет тестам регистрировать ключи доступа (passkey) и обрабатывать на странице процедуры navigator.credentials.create() / navigator.credentials.get() без настоящего аутентификатора или аппаратного ключа безопасности.
Существует три распространённых способа его использования:
Использование: добавление заранее известных учётных данных
const context = await browser.newContext();
// Ключ доступа, который ваш бэкенд уже подготовил для тестового пользователя.
await context.credentials.create('example.com', {
id: knownCredentialId, // base64url
userHandle: knownUserHandle, // base64url
privateKey: knownPrivateKey, // base64url PKCS#8 (DER)
publicKey: knownPublicKey, // base64url SPKI (DER)
});
await context.credentials.install();
const page = await context.newPage();
await page.goto('https://example.com/login');
// Вызов navigator.credentials.get() на странице получает ответ с добавленным ключом доступа.
Использование: получение учётных данных для последующего повторного использования
// Подготовительный тест: приложение регистрирует ключ доступа, затем сохраняем состояние хранилища вместе с ним.
const context = await browser.newContext();
await context.credentials.install();
const page = await context.newPage();
await page.goto('https://example.com/register');
await page.getByRole('button', { name: 'Create a passkey' }).click();
// Получаем ключ доступа, зарегистрированный страницей, — он включает закрытый ключ.
const [credential] = await context.credentials.get({ rpId: 'example.com' });
fs.writeFileSync('playwright/.auth/passkey.json', JSON.stringify(credential));
// Последующий тест: добавляем сохранённый ключ доступа, чтобы он уже был зарегистрирован при запуске приложения.
const credential = JSON.parse(fs.readFileSync('playwright/.auth/passkey.json', 'utf8'));
const context = await browser.newContext();
await context.credentials.create(credential.rpId, credential);
await context.credentials.install();
const page = await context.newPage();
await page.goto('https://example.com/login');
// navigator.credentials.get() возвращает сохранённый ключ доступа — вход выполнен.
Использование: сохранение учётных данных в состоянии хранилища для последующего восстановления
Примеры сохранения и восстановления состояния хранилища приведены в руководстве по аутентификации.
Значения по умолчанию
Методы
create
Добавлено в: v1.61Добавляет виртуальные учётные данные WebAuthn и возвращает их.
Если указан только rpId, генерирует новую пару ключей ECDSA P-256, идентификатор учётных данных и идентификатор пользователя. Добавленные учётные данные являются обнаруживаемыми (резидентными), поэтому страница может получать их как в сценариях с вводом имени пользователя перед использованием ключа доступа, так и в сценариях с ключом доступа без ввода имени пользователя. Возвращаемый объект содержит закрытый и открытый ключи, поэтому его можно сохранить на диск и повторно добавить в последующем тесте.
Чтобы импортировать известные учётные данные, укажите все четыре параметра: id, userHandle, privateKey и publicKey. Также передайте signCount, чтобы продолжить отсчёт с того значения счётчика подписей, которое доверяющая сторона уже получила.
Вызовите credentials.install() перед переходом на страницу, использующую WebAuthn.
Использование
await credentials.create(rpId);
await credentials.create(rpId, options);
Аргументы
-
Идентификатор доверяющей стороны (обычно эффективный домен сайта).
-
optionsObject (необязательно)-
Идентификатор учётных данных в кодировке base64url. Если не указан, генерируется автоматически.
-
privateKeystring (необязательно)#Закрытый ключ PKCS#8 (DER) в кодировке base64url. Если не указан, генерируется автоматически.
-
publicKeystring (необязательно)#Открытый ключ SPKI (DER) в кодировке base64url. Если не указан, генерируется автоматически.
-
signCountnumber (необязательно) Добавлено в: v1.64#Начальное значение счётчика подписей. Счётчик увеличивается на единицу при каждом успешном подтверждении аутентификации через
navigator.credentials.get(), поэтому первое подтверждение сообщает значениеsignCount + 1. По умолчанию —0. -
userHandlestring (необязательно)#Идентификатор пользователя в кодировке base64url. Если не указан, генерируется автоматически.
-
Возвращает
- Promise<Object>#
-
idstringИдентификатор учётных данных в кодировке base64url.
-
rpIdstringИдентификатор доверяющей стороны.
-
userHandlestringИдентификатор пользователя в кодировке base64url.
-
privateKeystringЗакрытый ключ PKCS#8 (DER) в кодировке base64url.
-
publicKeystringОткрытый ключ SPKI (DER) в кодировке base64url.
-
signCountnumberСчётчик подписей: значение, переданное доверяющей стороне при последнем подтверждении аутентификации.
-
delete
Добавлено в: v1.61Удаляет учётные данные из аутентификатора по их идентификатору. Работает для любых учётных данных, находящихся в аутентификаторе, — как добавленных через credentials.create(), так и зарегистрированных самой страницей вызовом navigator.credentials.create().
Использование
await credentials.delete(id);
Аргументы
Возвращает
get
Добавлено в: v1.61Возвращает все учётные данные, находящиеся в аутентификаторе, с возможностью фильтрации по rpId или id. Сюда входят как учётные данные, добавленные через credentials.create(), так и учётные данные, зарегистрированные самой страницей вызовом navigator.credentials.create().
Каждый возвращаемый объект учётных данных включает закрытый и открытый ключи, а также текущее значение счётчика подписей, поэтому только что зарегистрированный приложением ключ доступа можно сохранить и повторно добавить в последующем тесте через credentials.create() — см. второй пример в обзоре класса.
Использование
await credentials.get();
await credentials.get(options);
Аргументы
optionsObject (необязательно)
Возвращает
install
Добавлено в: v1.61Устанавливает виртуальный аутентификатор WebAuthn в контекст, переопределяя navigator.credentials.create() и navigator.credentials.get() на всех текущих и будущих страницах. Вызовите этот метод до первого обращения страницы к navigator.credentials.
Обязательный шаг: пока не вызван credentials.install(), перехват не выполняется и страница использует нативное поведение WebAuthn платформы (либо WebAuthn недоступен). Добавление учётных данных через credentials.create() без установки аутентификатора наполняет его, но страница никогда не увидит эти учётные данные.
Использование
await credentials.install();
Возвращает