PublicKeyCredential: phương thức tĩnh getClientCapabilities()
Baseline
2025
Newly available
Since February 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Phương thức tĩnh getClientCapabilities() của giao diện PublicKeyCredential trả về một Promise được giải quyết với một đối tượng có thể được dùng để kiểm tra xem các khả năng client WebAuthn cụ thể và tiện ích mở rộng có được hỗ trợ hay không.
Một relying party (RP) có thể dùng thông tin này để tùy chỉnh giao diện người dùng và quy trình đăng nhập và đăng ký của mình một cách phù hợp.
Cú pháp
PublicKeyCredential.getClientCapabilities()
Tham số
Không có.
Giá trị trả về
Một Promise được giải quyết thành một đối tượng trong đó tên thuộc tính là các chuỗi khả năng client, và giá trị là các giá trị boolean cho biết khả năng hoặc tiện ích mở rộng tương ứng có được hỗ trợ hay không.
Các chuỗi khả năng client WebAuthn là:
"conditionalCreate"-
Client có khả năng tạo thông tin xác thực có thể phát hiện.
"conditionalGet"-
Client có khả năng điều phối có điều kiện. Khả năng này tương đương với
isConditionalMediationAvailable()giải quyết thànhtrue. "hybridTransport"-
Client hỗ trợ sử dụng phương thức truyền tải hybrid. Điều này có nghĩa là client có thể sử dụng thiết bị xác thực dựa trên Bluetooth, NFC, hoặc USB.
"passkeyPlatformAuthenticator"-
Client cho phép sử dụng thiết bị xác thực passkey hỗ trợ các cơ chế multi-factor authentication như mã PIN hoặc kiểm tra sinh trắc học. Thiết bị xác thực có thể là một phần của cùng nền tảng (thiết bị) với client, hoặc kết nối qua phương thức truyền tải hybrid như Bluetooth hoặc USB. Thông tin xác thực được lưu trữ trên thiết bị xác thực. Xem Passkeys developer guide for relying parties.
userVerifyingPlatformAuthenticator-
Client có thiết bị xác thực nền tảng (là một phần của cùng thiết bị) hỗ trợ các cơ chế multi-factor authentication, chẳng hạn như mã PIN hoặc kiểm tra sinh trắc học. Thông tin xác thực có thể được lưu trữ trên RP hoặc thiết bị xác thực.
-
Client hỗ trợ Related Origin Requests. Các client này cho phép sử dụng passkey trên nhiều trang web có cùng nguồn gốc.
signalAllAcceptedCredentials-
Client hỗ trợ phương thức tĩnh
PublicKeyCredential.signalAllAcceptedCredentials(). Nếu không được hỗ trợ, quy trình RP sẽ cần nhắc người dùng xóa thông tin xác thực trên thiết bị xác thực theo cách thủ công. signalCurrentUserDetails-
Client hỗ trợ phương thức tĩnh
PublicKeyCredential.signalCurrentUserDetails(). Nếu không được hỗ trợ, quy trình RP sẽ cần nhắc người dùng cập nhật chi tiết người dùng trên thiết bị xác thực theo cách thủ công. signalUnknownCredential-
Client hỗ trợ phương thức tĩnh
PublicKeyCredential.signalUnknownCredential(). Nếu không được hỗ trợ, quy trình RP sẽ cần nhắc người dùng xóa thông tin xác thực từ thiết bị xác thực theo cách thủ công.
Các chuỗi web extension được định dạng bằng cách thêm tiền tố vào extension identifier với tiền tố extension:.
Ví dụ, khóa extension:appid có thể được dùng để kiểm tra xem tiện ích mở rộng appid có được hỗ trợ hay không.
Ngoại lệ
Promise được trả về có thể bị từ chối với các giá trị sau:
SecurityErrorDOMException-
Miền RP không hợp lệ.
Mô tả
getClientCapabilities() cho phép bạn kiểm tra xem khả năng hoặc tiện ích mở rộng nhất định có được hỗ trợ hay không, và sử dụng thông tin đó để cung cấp trải nghiệm người dùng phù hợp.
Ví dụ, hỗ trợ khả năng userVerifyingPlatformAuthenticator cho biết các biometric như cảm biến vân tay được cho phép.
Một ứng dụng web có thể dùng điều này để hiển thị biểu tượng vân tay nếu khả năng được hỗ trợ, hoặc ô nhập mật khẩu nếu không. Nếu đăng nhập bằng sinh trắc học là bắt buộc, nó có thể cung cấp thông báo rằng trang web không thể xác thực bằng trình duyệt hoặc thiết bị này.
Tương tự, conditionalGet cho biết client hỗ trợ điều phối có điều kiện khi đăng nhập người dùng, nghĩa là trình duyệt có thể cung cấp thông tin xác thực có thể phát hiện được điền tự động trong biểu mẫu đăng nhập (ví dụ như trường văn bản tự hoàn thành hoặc danh sách thả xuống), cùng với nút đăng nhập.
Nếu giá trị của một khả năng nhất định có mặt trong đối tượng được trả về, thì true cho biết khả năng hiện đang được hỗ trợ, và false cho biết nó không được. Tuy nhiên, nếu một khóa không có mặt cho khả năng cụ thể, không thể đưa ra giả định về sự có sẵn của tính năng liên quan.
Với tiện ích mở rộng, các giả định là như nhau. Tuy nhiên, lưu ý rằng ngay cả khi tiện ích mở rộng được client hỗ trợ, một thiết bị xác thực cụ thể có thể không hỗ trợ tiện ích mở rộng đó, vì vậy RP không được giả định rằng đây là đảm bảo rằng các bước xử lý thiết bị xác thực cho tiện ích mở rộng đó sẽ được thực hiện.
Ví dụ
>Kiểm tra tất cả khả năng
Ví dụ này cho thấy cách lấy đối tượng khả năng và lặp qua các giá trị của nó.
JavaScript
Đầu tiên chúng ta await getClientCapabilities() để lấy một đối tượng chứa các khả năng.
Sau đó chúng ta lặp qua đối tượng và ghi kết quả (mã ghi nhật ký không hiển thị):
async function checkClientCapabilities() {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities) {
log("Client Capabilities:");
for (const [key, value] of Object.entries(capabilities)) {
log(` ${key}: ${value}`);
}
}
}
Trước khi gọi hàm, chúng ta kiểm tra xem nó có được định nghĩa không, và ghi kết quả.
// Call the function to check capabilities.
if (PublicKeyCredential.getClientCapabilities) {
checkClientCapabilities();
} else {
log(
"PublicKeyCredential.getClientCapabilities() is not supported on this browser.",
);
}
Kết quả
Kiểm tra thiết bị xác thực nền tảng xác minh người dùng
Ví dụ này kiểm tra một khả năng duy nhất, userVerifyingPlatformAuthenticator. Một ứng dụng thực tế có thể dùng kết quả để cấu hình giao diện người dùng.
JavaScript
Code tương tự như ví dụ trước, ngoại trừ chúng ta kiểm tra một khả năng cụ thể được trả về, và chúng ta dùng try...catch để bắt trường hợp getClientCapabilities() không được hỗ trợ.
checkIsUserVerifyingPlatformAuthenticatorAvailable();
async function checkIsUserVerifyingPlatformAuthenticatorAvailable() {
try {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.userVerifyingPlatformAuthenticator) {
log("Biometric login supported");
} else {
log("Biometric login not supported. Do password.");
}
} catch (error) {
if (error instanceof TypeError) {
log(
"PublicKeyCredential.getClientCapabilities() is not supported on this browser.",
);
} else {
log(`Unexpected error: ${error}`);
}
}
}
Lưu ý rằng ở đây chúng ta ghi kết quả của một kiểm tra. Trong ứng dụng thực tế, chúng ta có thể cập nhật giao diện người dùng để hiển thị các tùy chọn phù hợp để xác minh người dùng.
Kết quả
Nhật ký bên dưới hiển thị một chuỗi cho biết phương thức không được hỗ trợ, hoặc một chuỗi cho biết đăng nhập sinh trắc học hay mật khẩu có được hỗ trợ hay không.
Thông số kỹ thuật
| Specification |
|---|
| Web Authentication: An API for accessing Public Key Credentials - Level 3> # sctn-getClientCapabilities> |