Перейти к основному содержимому

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 credentials.create

Добавляет виртуальные учётные данные WebAuthn и возвращает их.

Если указан только rpId, генерирует новую пару ключей ECDSA P-256, идентификатор учётных данных и идентификатор пользователя. Добавленные учётные данные являются обнаруживаемыми (резидентными), поэтому страница может получать их как в сценариях с вводом имени пользователя перед использованием ключа доступа, так и в сценариях с ключом доступа без ввода имени пользователя. Возвращаемый объект содержит закрытый и открытый ключи, поэтому его можно сохранить на диск и повторно добавить в последующем тесте.

Чтобы импортировать известные учётные данные, укажите все четыре параметра: id, userHandle, privateKey и publicKey. Также передайте signCount, чтобы продолжить отсчёт с того значения счётчика подписей, которое доверяющая сторона уже получила.

Вызовите credentials.install() перед переходом на страницу, использующую WebAuthn.

Использование

await credentials.create(rpId);
await credentials.create(rpId, options);

Аргументы

  • rpId string#

    Идентификатор доверяющей стороны (обычно эффективный домен сайта).

  • options Object (необязательно)

    • id string (необязательно)#

      Идентификатор учётных данных в кодировке base64url. Если не указан, генерируется автоматически.

    • privateKey string (необязательно)#

      Закрытый ключ PKCS#8 (DER) в кодировке base64url. Если не указан, генерируется автоматически.

    • publicKey string (необязательно)#

      Открытый ключ SPKI (DER) в кодировке base64url. Если не указан, генерируется автоматически.

    • signCount number (необязательно) Добавлено в: v1.64#

      Начальное значение счётчика подписей. Счётчик увеличивается на единицу при каждом успешном подтверждении аутентификации через navigator.credentials.get(), поэтому первое подтверждение сообщает значение signCount + 1. По умолчанию — 0.

    • userHandle string (необязательно)#

      Идентификатор пользователя в кодировке base64url. Если не указан, генерируется автоматически.

Возвращает

  • Promise<Object>#
    • id string

      Идентификатор учётных данных в кодировке base64url.

    • rpId string

      Идентификатор доверяющей стороны.

    • userHandle string

      Идентификатор пользователя в кодировке base64url.

    • privateKey string

      Закрытый ключ PKCS#8 (DER) в кодировке base64url.

    • publicKey string

      Открытый ключ SPKI (DER) в кодировке base64url.

    • signCount number

      Счётчик подписей: значение, переданное доверяющей стороне при последнем подтверждении аутентификации.


delete​

Добавлено в: v1.61 credentials.delete

Удаляет учётные данные из аутентификатора по их идентификатору. Работает для любых учётных данных, находящихся в аутентификаторе, — как добавленных через credentials.create(), так и зарегистрированных самой страницей вызовом navigator.credentials.create().

Использование

await credentials.delete(id);

Аргументы

  • id string#

    Идентификатор учётных данных в кодировке base64url.

Возвращает


get​

Добавлено в: v1.61 credentials.get

Возвращает все учётные данные, находящиеся в аутентификаторе, с возможностью фильтрации по rpId или id. Сюда входят как учётные данные, добавленные через credentials.create(), так и учётные данные, зарегистрированные самой страницей вызовом navigator.credentials.create().

Каждый возвращаемый объект учётных данных включает закрытый и открытый ключи, а также текущее значение счётчика подписей, поэтому только что зарегистрированный приложением ключ доступа можно сохранить и повторно добавить в последующем тесте через credentials.create() — см. второй пример в обзоре класса.

Использование

await credentials.get();
await credentials.get(options);

Аргументы

  • options Object (необязательно)
    • id string (необязательно)#

      Возвращать только учётные данные с этим идентификатором в кодировке base64url.

    • rpId string (необязательно)#

      Возвращать только учётные данные для этого идентификатора доверяющей стороны.

Возвращает


install​

Добавлено в: v1.61 credentials.install

Устанавливает виртуальный аутентификатор WebAuthn в контекст, переопределяя navigator.credentials.create() и navigator.credentials.get() на всех текущих и будущих страницах. Вызовите этот метод до первого обращения страницы к navigator.credentials.

Обязательный шаг: пока не вызван credentials.install(), перехват не выполняется и страница использует нативное поведение WebAuthn платформы (либо WebAuthn недоступен). Добавление учётных данных через credentials.create() без установки аутентификатора наполняет его, но страница никогда не увидит эти учётные данные.

Использование

await credentials.install();

Возвращает