Phát hiện tính năng WebAuthn đơn giản hơn bằng getClientCapabilities()

Ngày phát hành: 15 tháng 1 năm 2025

WebAuthn cung cấp các tính năng độc đáo như tương tác với Bluetooth cho giao thức kết hợp, giao tiếp với nhà cung cấp khoá truy cập và đề xuất khoá truy cập trong tính năng tự động điền. Tuy nhiên, các ứng dụng và trình xác thực khác nhau lại có mức độ hỗ trợ khác nhau cho các tính năng WebAuthn. Sự chênh lệch này có thể dẫn đến trải nghiệm người dùng bị phân mảnh, trong đó một số người dùng có thể gặp lỗi hoặc không thể sử dụng một số tuỳ chọn xác thực nhất định. Việc cung cấp một cách để nhà phát triển xác định các chức năng của ứng dụng cho phép họ tạo các quy trình xác thực mạnh mẽ hơn để thích ứng với những biến thể này.

Phương thức PublicKeyCredential.getClientCapabilities() cho phép các bên phụ thuộc xác định tính năng WebAuthn nào được trình duyệt hỗ trợ. Phương thức này trả về một lời hứa phân giải thành danh sách các chức năng được hỗ trợ, cho phép nhà phát triển điều chỉnh trải nghiệm xác thực và quy trình làm việc dựa trên các chức năng cụ thể của ứng dụng.

Khả năng tương thích

Browser Support

  • Chrome: not supported.
  • Edge: not supported.
  • Firefox: not supported.
  • Safari: 17.4.

getClientCapabilities()

getClientCapabilities() là một API WebAuthn cho phép các bên phụ thuộc xác định những chức năng có sẵn. Để sử dụng API, bạn cần gọi PublicKeyCredential.getClientCapabilities(). Lời hứa được trả về sẽ phân giải thành một đối tượng chứa các chức năng, mỗi chức năng cho biết khả năng sử dụng của đối tượng đó bằng true hoặc false. Nếu chức năng là undefined, hãy xem xét khả năng có sẵn của chức năng đó.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

Trình duyệt có thể tạo thông tin xác thực mà không cần giao diện người dùng phương thức nổi bật nếu người dùng đã đồng ý tạo thông tin xác thực.

conditionalGet

Trình duyệt có thể xác thực bằng cách hiển thị khoá truy cập trong hộp thoại tự động điền, thay vì giao diện người dùng phương thức nổi bật. Giá trị tương đương hiện tại là PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

Thiết bị có thể sử dụng Bluetooth để trình duyệt có thể tạo thông tin xác thực và xác thực thông tin đó trên nhiều thiết bị bằng giao thức kết hợp. Điều này thường có nghĩa là trình duyệt có thể hiển thị mã QR để người dùng có thể quét mã đó và đăng nhập bằng điện thoại có thông tin xác thực.

passkeyPlatformAuthenticator

Trình duyệt có thể tạo thông tin xác thực và xác thực bằng thông tin đó thông qua trình xác thực nền tảng xác minh người dùng hoặc một thiết bị khác hỗ trợ thông tin xác thực đó thông qua giao thức kết hợp. Tương đương với hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

Trình duyệt có thể tạo thông tin xác thực và xác thực bằng thông tin xác thực không khớp với mã nhận dạng RP, miễn là thông tin xác thực đó được chỉ định trong tệp nguồn gốc liên quan.

signalAllAcceptedCredentials

Trình duyệt có thể báo hiệu thông tin xác thực hiện có trên máy chủ cho nhà cung cấp khoá truy cập để nhà cung cấp khoá truy cập có thể duy trì danh sách khoá truy cập nhất quán với máy chủ.

signalCurrentUserDetails

Trình duyệt có thể gửi tín hiệu thông tin người dùng như tên người dùng và tên hiển thị trên máy chủ đến nhà cung cấp khoá truy cập để nhà cung cấp khoá truy cập có thể giữ cho thông tin khoá truy cập của họ nhất quán với máy chủ.

signalUnknownCredential

Trình duyệt có thể báo hiệu thông tin xác thực đã xoá trên máy chủ cho trình cung cấp khoá truy cập để trình cung cấp khoá truy cập có thể duy trì danh sách khoá truy cập nhất quán với máy chủ.

userVerifyingPlatformAuthenticator

Trình duyệt có thể tạo và xác thực bằng thông tin xác thực trên trình xác thực nền tảng. Điều này không có nghĩa là trình duyệt hỗ trợ giao thức kết hợp. Giá trị tương đương hiện tại là PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

tiện ích

RP cũng có thể xác định các tiện ích có sẵn bằng getClientCapabilities().

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

Giá trị nhận dạng có tiền tố là extension:, theo sau là tên tiện ích. Tham khảo Mã nhận dạng tiện ích WebAuthn được xác định tại IANA để biết tên tiện ích.

Tìm hiểu thêm

Để tìm hiểu thêm về khoá truy cập, hãy bắt đầu từ bài viết Đăng nhập không cần mật khẩu bằng khoá truy cập.