Phương thức CredentialsContainer: create()

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2019.

* Some parts of this feature may have varying levels of support.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Phương thức create() của giao diện CredentialsContainer tạo một thông tin xác thực mới, sau đó có thể được lưu trữ và truy xuất về sau bằng phương thức navigator.credentials.get(). Thông tin xác thực được truy xuất sau đó có thể được một trang web dùng để xác thực người dùng.

Phương thức này hỗ trợ ba loại thông tin xác thực khác nhau:

  • Thông tin xác thực mật khẩu, cho phép người dùng đăng nhập bằng mật khẩu.
  • Thông tin xác thực liên kết, cho phép người dùng đăng nhập bằng nhà cung cấp danh tính liên kết.
  • Thông tin xác thực khóa công khai, cho phép người dùng đăng nhập bằng một authenticator như đầu đọc sinh trắc học tích hợp trong nền tảng hoặc token phần cứng có thể tháo rời.

Lưu ý rằng Federated Credential Management API (FedCM) thay thế loại thông tin xác thực liên kết.

Cú pháp

js
create()
create(options)

Tham số

options Optional

Một đối tượng chứa các tùy chọn cho đối tượng Credentials mới được yêu cầu. Đối tượng này có thể chứa các thuộc tính sau:

signal Optional

Một thể hiện đối tượng AbortSignal cho phép hủy thao tác create() đang diễn ra. Một thao tác bị hủy có thể vẫn hoàn tất bình thường (thường là khi yêu cầu hủy đến sau khi thao tác đã xong) hoặc bị từ chối với một DOMException AbortError.

Mỗi thuộc tính sau đây biểu thị một loại thông tin xác thực đang được tạo. Phải chỉ định đúng một và chỉ một trong số chúng:

federated Optional

Một đối tượng FederatedCredentialInit chứa các yêu cầu để tạo thông tin xác thực cho nhà cung cấp danh tính liên kết.

password Optional

Một đối tượng PasswordCredentialInit chứa các yêu cầu để tạo thông tin xác thực mật khẩu.

publicKey Optional

Một đối tượng PublicKeyCredentialCreationOptions chứa các yêu cầu để tạo thông tin xác thực khóa công khai. Việc này khiến lệnh gọi create() yêu cầu user agent tạo thông tin xác thực mới thông qua một authenticator, hoặc để đăng ký tài khoản mới hoặc để liên kết một cặp khóa bất đối xứng mới với tài khoản hiện có.

Note: Việc dùng create() với tham số publicKey có thể bị chặn bởi Permissions Policy publickey-credentials-create được đặt trên máy chủ của bạn.

Giá trị trả về

Một Promise được giải quyết với một trong các giá trị sau:

Nếu không thể tạo đối tượng thông tin xác thực nào, promise sẽ được giải quyết với null.

Ngoại lệ

TypeError

Trong trường hợp yêu cầu tạo PasswordCredential, id, origin hoặc password không được cung cấp (trống).

NotAllowedError DOMException

Các nguyên nhân có thể bao gồm:

AbortError DOMException

Thao tác đã bị hủy.

Ví dụ

Tạo thông tin xác thực mật khẩu

Ví dụ này tạo một thông tin xác thực mật khẩu từ đối tượng PasswordCredentialInit.

js
const credInit = {
  id: "serpent1234", // "username" trong một cặp tên người dùng/mật khẩu điển hình
  name: "Serpentina", // tên hiển thị cho thông tin xác thực
  origin: "https://example.org",
  password: "the last visible dog",
};

const makeCredential = document.querySelector("#make-credential");

makeCredential.addEventListener("click", async () => {
  const cred = await navigator.credentials.create({
    password: credInit,
  });
  console.log(cred.name);
  // Serpentina
  console.log(cred.id);
  // serpent1234
  console.log(cred.password);
  // the last visible dog
});

Tạo thông tin xác thực liên kết

Ví dụ này tạo một thông tin xác thực liên kết từ đối tượng FederatedCredentialInit.

js
const credInit = {
  id: "1234",
  name: "Serpentina",
  origin: "https://example.org",
  protocol: "openidconnect",
  provider: "https://provider.example.org",
};

const makeCredential = document.querySelector("#make-credential");

makeCredential.addEventListener("click", async () => {
  const cred = await navigator.credentials.create({
    federated: credInit,
  });
  console.log(cred.name);
  console.log(cred.provider);
});

Tạo thông tin xác thực khóa công khai

Ví dụ này tạo một thông tin xác thực khóa công khai từ đối tượng PublicKeyCredentialCreationOptions.

js
const publicKey = {
  challenge: challengeFromServer,
  rp: { id: "acme.com", name: "ACME Corporation" },
  user: {
    id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
    name: "jamiedoe",
    displayName: "Jamie Doe",
  },
  pubKeyCredParams: [{ type: "public-key", alg: -7 }],
};

const publicKeyCredential = await navigator.credentials.create({ publicKey });

Nếu lệnh gọi create() thành công, nó trả về một promise được giải quyết với một thể hiện đối tượng PublicKeyCredential, biểu diễn một thông tin xác thực khóa công khai mà sau này có thể dùng để xác thực người dùng thông qua lệnh gọi WebAuthn get(). Thuộc tính PublicKeyCredential.response của nó chứa một đối tượng AuthenticatorAttestationResponse cho phép truy cập vào một số thông tin hữu ích, bao gồm dữ liệu authenticator, khóa công khai, cơ chế truyền tải, v.v.

js
navigator.credentials.create({ publicKey }).then((publicKeyCredential) => {
  const response = publicKeyCredential.response;

  // Truy cập ArrayBuffer attestationObject
  const attestationObj = response.attestationObject;

  // Truy cập client JSON
  const clientJSON = response.clientDataJSON;

  // Trả về ArrayBuffer dữ liệu authenticator
  const authenticatorData = response.getAuthenticatorData();

  // Trả về ArrayBuffer khóa công khai
  const pk = response.getPublicKey();

  // Trả về mã định danh thuật toán khóa công khai
  const pkAlgo = response.getPublicKeyAlgorithm();

  // Trả về mảng các phương thức truyền tải được phép
  const transports = response.getTransports();
});

Một phần dữ liệu này sẽ cần được lưu trữ trên máy chủ cho các thao tác xác thực trong tương lai đối với thông tin xác thực này, ví dụ như khóa công khai, thuật toán được sử dụng và các phương thức truyền tải được phép.

Note: Xem Tạo một cặp khóa và đăng ký người dùng để biết thêm thông tin về cách hoạt động của toàn bộ luồng.

Thông số kỹ thuật

Specification
Credential Management Level 1
# dom-credentialscontainer-create

Tính tương thích của trình duyệt