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

Credentials

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

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

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

context = browser.new_context()

# Ключ доступа, который ваш бэкенд уже подготовил для тестового пользователя.
context.credentials.create(
"example.com",
id=known_credential_id, # base64url
user_handle=known_user_handle, # base64url
private_key=known_private_key, # base64url PKCS#8 (DER)
public_key=known_public_key, # base64url SPKI (DER)
)
context.credentials.install()

page = context.new_page()
page.goto("https://example.com/login")
# Вызов navigator.credentials.get() на странице получает добавленный ключ доступа.

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

# Подготовительный тест: позволяем приложению зарегистрировать ключ доступа, затем сохраняем его.
context = browser.new_context()
context.credentials.install()

page = context.new_page()
page.goto("https://example.com/register")
page.get_by_role("button", name="Create a passkey").click()

# Получаем зарегистрированный страницей ключ доступа — он включает закрытый ключ.
[credential] = context.credentials.get(rp_id="example.com")
with open("playwright/.auth/passkey.json", "w") as f:
json.dump(credential, f)
# Последующий тест: добавляем сохранённый ключ доступа, чтобы он уже был зарегистрирован при запуске приложения.
with open("playwright/.auth/passkey.json") as f:
credential = json.load(f)
context = browser.new_context()
context.credentials.create(
credential["rpId"],
id=credential["id"],
user_handle=credential["userHandle"],
private_key=credential["privateKey"],
public_key=credential["publicKey"],
sign_count=credential["signCount"],
)
context.credentials.install()

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

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

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

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


Методы​

create​

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

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

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

Чтобы импортировать известные учётные данные, передайте все четыре параметра — id, user_handle, private_key и public_key — одновременно. Также передайте sign_count, чтобы продолжить отсчёт со значения счётчика подписей, которое доверяющая сторона уже получила.

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

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

credentials.create(rp_id)
credentials.create(rp_id, **kwargs)

Аргументы

  • rp_id str#

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

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

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

  • private_key str (необязательно)#

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

  • public_key str (необязательно)#

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

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

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

  • user_handle str (необязательно)#

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

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

  • Dict#
    • id str

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

    • rpId str

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

    • userHandle str

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

    • privateKey str

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

    • publicKey str

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

    • signCount int

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


delete​

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

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

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

credentials.delete(id)

Аргументы

  • id str#

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

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


get​

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

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

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

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

credentials.get()
credentials.get(**kwargs)

Аргументы

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

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

  • rp_id str (необязательно)#

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

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


install​

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

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

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

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

credentials.install()

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