Ngày xuất bản: 15 tháng 1 năm 2025
WebAuthn cung cấp các chức năng riêng biệt 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 điền sẵn. Tuy nhiên, các máy khách và trình xác thực khác nhau sẽ cung cấp các mức độ hỗ trợ khác nhau cho các tính năng WebAuthn. Sự khác biệt này có thể dẫn đến trải nghiệm rời rạc cho người dùng, 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ố lựa chọn xác thực nhất định. Việc cung cấp cho nhà phát triển một cách để xác định các chức năng của ứng dụng cho phép họ tạo ra 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 những tính năng WebAuthn mà 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 và quy trình xác thự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
getClientCapabilities()
getClientCapabilities()
là một WebAuthn API cho phép các bên phụ thuộc xác định những chức năng hiện có. Để sử dụng API này, 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 trạng thái sẵn có của chức năng đó bằng true
hoặc false
. Nếu tính năng có trạng thái undefined
, hãy coi như bạn không biết phạm vi cung cấp của tính 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 đăng nhập 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 đăng nhập.
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. Số tiền 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 bằng 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 đăng nhập.
passkeyPlatformAuthenticator
Trình duyệt có thể tạo thông tin đăng nhập và xác thực bằng thông tin đó thông qua một 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 đăng nhập đó 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 một thông tin đăng nhập và xác thực bằng thông tin đăng nhập đó mà không khớp với mã nhận dạng RP, miễn là thông tin đăng nhập đó được chỉ định trong tệp nguồn gốc liên quan.
signalAllAcceptedCredentials
Trình duyệt có thể chuyển 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ì tính nhất quán giữa danh sách khoá truy cập và máy chủ.
signalCurrentUserDetails
Trình duyệt có thể báo hiệu thông tin người dùng, chẳng hạn như tên người dùng và tên hiển thị 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ì thông tin khoá truy cập nhất quán với máy chủ.
signalUnknownCredential
Trình duyệt có thể chuyển tín hiệu về thông tin xác thực đã xoá 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ì tính nhất quán giữa danh sách khoá truy cập và 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.
Số tiền 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 các 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.