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

Credentials

Credentials — это виртуальный аутентификатор WebAuthn, действующий в пределах BrowserContext. Он позволяет тестам регистрировать ключи доступа (passkey) и обрабатывать процедуры navigator.credentials.create() / navigator.credentials.get() на странице без настоящего аутентификатора или аппаратного ключа безопасности.

Существует три распространённых способа его использования:

Использование: добавление заранее известных учётных данных

var context = await browser.NewContextAsync();

// Ключ доступа, который ваш бэкенд уже подготовил для тестового пользователя.
await context.Credentials.CreateAsync("example.com", new()
{
Id = knownCredentialId, // base64url
UserHandle = knownUserHandle, // base64url
PrivateKey = knownPrivateKey, // base64url PKCS#8 (DER)
PublicKey = knownPublicKey, // base64url SPKI (DER)
});
await context.Credentials.InstallAsync();

var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com/login");
// Вызов navigator.credentials.get() на странице обрабатывается с использованием добавленного ключа доступа.

Использование: получение учётных данных с последующим повторным использованием

// Подготовительный тест: дайте приложению зарегистрировать ключ доступа, затем сохраните его.
var context = await browser.NewContextAsync();
await context.Credentials.InstallAsync();

var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com/register");
await page.GetByRole(AriaRole.Button, new() { Name = "Create a passkey" }).ClickAsync();

// Получите ключ доступа, зарегистрированный страницей, — он включает закрытый ключ.
var credentials = await context.Credentials.GetAsync(new() { RpId = "example.com" });
File.WriteAllText("playwright/.auth/passkey.json", JsonSerializer.Serialize(credentials[0]));
// Последующий тест: добавьте сохранённый ключ доступа, чтобы при запуске приложения он уже был зарегистрирован.
var credential = JsonSerializer.Deserialize<VirtualCredential>(
File.ReadAllText("playwright/.auth/passkey.json"));
var context = await browser.NewContextAsync();
await context.Credentials.CreateAsync(credential.RpId, new()
{
Id = credential.Id,
UserHandle = credential.UserHandle,
PrivateKey = credential.PrivateKey,
PublicKey = credential.PublicKey,
SignCount = credential.SignCount,
});
await context.Credentials.InstallAsync();

var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com/login");
// navigator.credentials.get() возвращает сохранённый ключ доступа — вход выполнен.

Использование: сохранение учётных данных в состоянии хранилища с последующим восстановлением

Примеры сохранения и восстановления состояния хранилища приведены в руководстве по аутентификации.

Значения по умолчанию


Методы​

CreateAsync​

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

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

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

Чтобы импортировать известные учётные данные, передайте вместе все четыре параметра: Id, UserHandle, PrivateKey и PublicKey. Также передайте SignCount, чтобы продолжить отсчёт со значения счётчика подписей, которое доверяющая сторона уже получила ранее.

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

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

await Credentials.CreateAsync(rpId, options);

Аргументы

  • rpId string#

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

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

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

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

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

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

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

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

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

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

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

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

Возвращаемое значение

  • Create#
    • id string

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

    • rpId string

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

    • userHandle string

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

    • privateKey string

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

    • publicKey string

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

    • signCount int

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


DeleteAsync​

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

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

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

await Credentials.DeleteAsync(id);

Аргументы

  • id string#

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

Возвращаемое значение


GetAsync​

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

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

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

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

await Credentials.GetAsync(options);

Аргументы

  • options CredentialsGetOptions? (необязательно)
    • Id string? (необязательно)#

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

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

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

Возвращаемое значение


InstallAsync​

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

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

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

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

await Credentials.InstallAsync();

Возвращаемое значение