Tìm hiểu cách WebAuthn Signal API cho phép xóa passkey và cập nhật metadata (user.name, user.displayName) một cách liền mạch trên các trình xác thực phía client.
Vincent
Created: August 8, 2025
Updated: August 8, 2025
See the original blog version in English here.
Our mission is to make the Internet a safer place, and the new login standard passkeys provides a superior solution to achieve that. That's why we want to help you understand passkeys and its characteristics better.
Hệ sinh thái passkey đang không ngừng phát triển. Để tạo điều kiện cho sự thay đổi, tiêu chuẩn WebAuthn nền tảng cũng phát triển nhanh chóng. Các tính năng mới thường bắt đầu bằng một bản giải thích kỹ thuật trên GitHub và sau đó phát triển thành một pull request vào tiêu chuẩn khi đã được thảo luận đầy đủ. Gần đây, pull request này đã được thêm vào bản nháp tiêu chuẩn với tên gọi WebAuthn Signal API. Trong bài viết này, chúng ta sẽ tìm hiểu về:
Tại thời điểm cập nhật bài viết này vào tháng 1 năm 2025, WebAuthn Signal API được bật mặc định từ Chrome 132 và trước đây được biết đến với tên gọi Reporting API trước khi được đổi tên để tránh xung đột với một API khác cùng tên.
Recent Articles
🔑
Passkeys & WebAuthn PRF cho Mã hóa End-to-End (2025)
📖
WebAuthn pubKeyCredParams & credentialPublicKey: Tìm hiểu về CBOR & COSE
📖
Gợi ý về Thông tin xác thực Khóa công khai WebAuthn / Gợi ý User-Agent
📖
Giao thức (CXP) & Định dạng (CXF) Trao đổi Thông tin xác thực WebAuthn
🔑
Các Phương Pháp Đăng Nhập và Xác Thực Bằng Mã QR
WebAuthn Signal API giải quyết các trường hợp sử dụng cụ thể liên quan đến việc quản lý passkey ở phía client. Cụ thể, nó giúp đồng bộ hóa thông tin giữa bên tin cậy (RP) và các trình xác thực là một phần của hệ điều hành phía client. Các trường hợp sử dụng quan trọng sau đây tồn tại:
Khi một passkey được tạo, nó bao gồm một số thông tin: user.id
, user.name
, và user.displayName
. Bản thân passkey được xác định thông qua Credential ID duy nhất.
user.id
này rất quan trọng vì nó được sử dụng để khớp passkey với tài khoản của người dùng.Hình minh họa sau đây cho thấy một cấu trúc cơ sở dữ liệu đơn giản, điển hình giải thích thông tin nào thường được lưu trữ trong trường nào:
Điều quan trọng cần hiểu là trong khi user.name
(thường là địa chỉ email) và user.displayName
(một tên thân thiện, dễ đọc hơn) giúp người dùng nhận dạng tài khoản của họ trong giao diện lựa chọn, sự liên kết thực sự giữa một passkey và một tài khoản được duy trì thông qua user.id
và Credential ID:
user.id
Một vấn đề phát sinh khi user.name
, có thể là một địa chỉ email, thay đổi. Hiện tại, không có cơ chế nào để cập nhật thay đổi này trực tiếp trên trình xác thực phía client. user.name
có thể thay đổi vì nhiều lý do, chẳng hạn như khi người dùng cập nhật địa chỉ email của họ. Mặc dù có sự thay đổi này trong metadata của tài khoản ở phía máy chủ, user.name
cũ sẽ tiếp tục xuất hiện trong giao diện lựa chọn thông tin xác thực, điều này có thể gây nhầm lẫn cho người dùng.
Giải pháp tạm thời cho vấn đề này là tạo một passkey mới với user.name
đã cập nhật và cùng user.id
, sau đó ghi đè lên passkey hiện có. Tuy nhiên, cách tiếp cận này bất tiện vì nhiều lý do:
user.id
chỉ có thể có một passkey cho mỗi ID của bên tin cậy, nghĩa là passkey cũ phải được thay thế bằng một passkey mới, đây là một bước thừa.Địa chỉ email, số điện thoại và các định danh khác có thể thay đổi thường xuyên. Nếu không có phương pháp đơn giản để cập nhật trực tiếp user.name
và user.displayName
trên trình xác thực, người dùng có thể gặp phải vấn đề dai dẳng là họ nhìn thấy và phải chọn một passkey được liên kết với địa chỉ email cũ của họ. Tình huống này làm suy yếu trải nghiệm liền mạch mà passkey hướng tới. WebAuthn Signal API nhằm giải quyết vấn đề này bằng cách cho phép các bên tin cậy báo cáo các cập nhật cho metadata của passkey mà không yêu cầu tạo mới. Trước khi chúng ta giải thích cách triển khai Signal API, chúng ta sẽ khám phá trường hợp sử dụng quan trọng thứ hai mà nó giải quyết.
Một trường hợp sử dụng quan trọng khác là xóa passkey trên trình xác thực phía client. Theo thời gian, người dùng có thể thu hồi thông tin xác thực thông qua danh sách quản lý passkey hoặc xóa tài khoản của họ, và việc đảm bảo các thông tin xác thực này được xóa khỏi trình xác thực phía client trở nên cần thiết để chúng không xuất hiện trong các giao diện lựa chọn thông tin xác thực trong tương lai (Conditional UI / tự động điền passkey).
Nhu cầu về chức năng này phát sinh trong một số tình huống:
Từ góc độ người dùng, thật khó hiểu khi việc xóa trong cài đặt tài khoản của họ, trong một hộp thoại như trên, lại không dẫn đến việc passkey bị xóa trên client này.
Nếu không có phương pháp trực tiếp để xóa passkey ở phía client, những thông tin xác thực lỗi thời hoặc không hợp lệ này tiếp tục làm lộn xộn giao diện lựa chọn, dẫn đến sự nhầm lẫn. Người dùng có thể thấy và cố gắng sử dụng các passkey không còn hợp lệ, dẫn đến các lần xác thực thất bại và trải nghiệm người dùng kém.
Việc triển khai WebAuthn Signal API bao gồm một số bước và cân nhắc để đảm bảo chức năng được tích hợp một cách chính xác và an toàn. Signal API cho phép các bên tin cậy (RP) cập nhật hoặc xóa thông tin xác thực passkey trên trình xác thực phía client. Phần này nêu ra các cân nhắc và các bước chính để triển khai.
Khi triển khai WebAuthn Signal API, điều quan trọng là phải ghi nhớ những cân nhắc sau:
Bảo vệ quyền riêng tư: WebAuthn Signal API được thiết kế để bảo vệ quyền riêng tư của người dùng vì đây là một trong những nền tảng của WebAuthn. Điều này có nghĩa là không có phản hồi nào được cung cấp cho RP về việc liệu thay đổi được yêu cầu có được xử lý hay không. API hoạt động âm thầm để ngăn chặn bất kỳ sự rò rỉ thông tin tiềm tàng nào về trạng thái của thông tin xác thực.
Tính sẵn có của Trình xác thực: Hiệu quả của WebAuthn Signal API phụ thuộc vào tính sẵn có của trình xác thực. Điều này bao gồm cả tính sẵn có vật lý (ví dụ: sự hiện diện của khóa bảo mật) và hỗ trợ phần mềm (ví dụ: khả năng tương thích của trình duyệt và hệ điều hành). Trình duyệt chỉ có thể thực hiện các hành động nếu trình xác thực có thể truy cập được và hỗ trợ các hoạt động cần thiết mà không cần xác thực sinh trắc học.
Hạn chế về Miền: API đảm bảo rằng chỉ bên tin cậy được liên kết với một miền cụ thể mới có thể yêu cầu thay đổi đối với thông tin xác thực liên quan đến miền đó. Đây là một biện pháp bảo mật để ngăn chặn các sửa đổi trái phép của bên thứ ba.
Credential ID làm Khóa: Khi tham chiếu đến passkey, Credential ID là khóa chính được WebAuthn Signal API sử dụng. ID này xác định duy nhất passkey trên trình xác thực phía client. API cho phép RP thay đổi metadata liên quan đến passkey hoặc báo hiệu rằng một số passkey không nên được truy cập nữa, nhưng chỉ thông qua Credential ID. Trong trường hợp một trình xác thực không biết một Credential ID cụ thể, nó sẽ âm thầm bỏ qua.
Những cân nhắc này là cần thiết để hiểu các khía cạnh quan trọng nhất của WebAuthn Signal API hoạt động chính xác.
WebAuthn Signal API cung cấp một cơ chế hợp lý cho các bên tin cậy (RP) để cập nhật metadata liên quan đến passkey trên các trình xác thực phía client. Điều này đặc biệt quan trọng để đảm bảo rằng người dùng thấy thông tin chính xác và cập nhật trong giao diện lựa chọn thông tin xác thực mà không cần phải tạo passkey mới một cách không cần thiết. Đây là cách API cho phép điều này xảy ra:
Cập nhật Metadata với signalCurrentUserDetails(options)
Phương thức signalCurrentUserDetails(options)
trong Signal API được thiết kế đặc biệt để cập nhật metadata của passkey. Phương thức này cho phép RP cung cấp các giá trị hiện tại cho user.name
và user.displayName
.
Đây là cách quy trình hoạt động (xem thêm tiêu chuẩn WebAuthn Cấp 3).
signalCurrentUserDetails(options)
bao gồm rp.id
, user.id
và các giá trị đã cập nhật cho user.name
và user.displayName
.PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "aabbcc", // user handle, base64url. name: "New user name", displayName: "New display name", });
Cập nhật Metadata cục bộ: Tìm kiếm các thông tin xác thực có sẵn cục bộ (trên trình xác thực) khớp với rpId
và userId
. Đối với tất cả các thông tin xác thực khớp, trình xác thực sẽ cập nhật name
và displayName
của thông tin xác thực.
Bảo vệ quyền riêng tư: Quá trình này được thiết kế để bảo vệ quyền riêng tư. Signal API không cung cấp phản hồi cho RP về việc liệu các cập nhật có được xử lý thành công hay không, ngăn chặn bất kỳ sự rò rỉ thông tin nào về trạng thái của thông tin xác thực.
Tính nhất quán trên các thiết bị: Bằng cách thường xuyên chạy các phương thức signalCurrentUserDetails(options)
, RP có thể đảm bảo rằng metadata cho passkey vẫn nhất quán trên các thiết bị và nền tảng khác nhau nơi người dùng có thể xác thực. Cách tiếp cận này làm giảm khả năng thông tin lỗi thời hoặc không chính xác được hiển thị trong giao diện lựa chọn thông tin xác thực.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy cách Google Chrome báo hiệu một bản cập nhật như vậy cho người dùng. WebAuthn Signal API là một phần của Chrome 130 và có thể được thử nghiệm với Google Password Manager trên máy tính để bàn nếu cờ tính năng web thử nghiệm được kích hoạt.
WebAuthn Signal API cung cấp các cơ chế cho các bên tin cậy (RP) để báo hiệu việc xóa passkey khỏi các trình xác thực phía client. Điều này rất cần thiết để đảm bảo rằng các thông tin xác thực lỗi thời hoặc không hợp lệ không xuất hiện trong giao diện lựa chọn thông tin xác thực, do đó duy trì trải nghiệm người dùng hợp lý và an toàn. Có hai phương pháp để xóa passkey cục bộ: signalUnknownCredential(options)
và signalAllAcceptedCredentials)(options)
. Phương pháp đầu tiên có thể được sử dụng trong các tình huống người dùng không được xác thực, trong khi phương pháp thứ hai có thể được sử dụng khi người dùng được xác thực. Do đó, phương pháp thứ hai nên được ưu tiên vì lý do riêng tư.
Đây là cách hai phương pháp hoạt động:
signalUnknownCredential(options)
bao gồm rpId
(ID của bên tin cậy) và credentialId
(định danh duy nhất của thông tin xác thực cần xóa).PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "aabbcc", // credential id the user just tried, base64url });
Gọi phương thức: RP gọi phương thức này bất cứ khi nào họ phát hiện ra rằng một thông tin xác thực nên được xóa. Điều này có thể xảy ra ngay sau một lần thử xác thực với một thông tin xác thực không hợp lệ, trong quá trình xóa tài khoản, hoặc khi người dùng thu hồi một thông tin xác thực thông qua cài đặt tài khoản.
Xử lý phương thức: Khi phương thức signalUnknownCredential(options)
được gọi, trình xác thực phía client cố gắng tìm các thông tin xác thực khớp với rpId
và credentialID
được chỉ định để bỏ qua. Tùy thuộc vào khả năng của trình xác thực, thông tin xác thực sẽ bị xóa hoặc một quy trình cụ thể của trình xác thực sẽ được sử dụng để ẩn thông tin xác thực trong các lần xác thực trong tương lai.
signalAllAcceptedCredentials(options)
bao gồm rpId
(ID của bên tin cậy), userId
và một danh sách các Credential ID hợp lệ allAcceptedCredentialIds
(danh sách các định danh duy nhất của các thông tin xác thực nên được giữ lại).PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "aabbcc", // user handle, base64url. allAcceptedCredentialIds: ["bb"], });
Gọi phương thức: RP gọi phương thức này bất cứ khi nào họ phát hiện ra rằng một thông tin xác thực nên được xóa và báo hiệu một danh sách các thông tin xác thực hợp lệ. Phương pháp này nên được ưu tiên hơn signalUnknownCredential(options)
để xóa thông tin xác thực.
Xử lý phương thức: Khi phương thức signalAllAcceptedCredentials(options)
được gọi, trình xác thực phía client khớp rpId
và userId
. Trình xác thực sẽ tra cứu tất cả các thông tin xác thực cục bộ khớp với rpId
và userId
. Kết quả được so sánh với allAcceptedCredentialIds
. Nếu có các thông tin xác thực cục bộ không có trong allAcceptedCredentialIds
, thì các thông tin xác thực này sẽ bị xóa cục bộ (hoặc bị ẩn tùy thuộc vào trình xác thực).
Hiển thị lại thông tin xác thực: Nếu một thông tin xác thực chỉ bị ẩn (tùy thuộc vào trình xác thực) và bây giờ là một phần của allAcceptedCredentialIds
, thì thông tin xác thực này sẽ xuất hiện trở lại trong các lần xác thực trong tương lai.
Mẹo hữu ích:
signalAllAcceptedCredentials(options)
, điều quan trọng cần lưu ý là các trình xác thực có thể không phải lúc nào cũng được kết nối tại thời điểm phương thức này được thực thi. Do đó, các bên tin cậy có thể cân nhắc chạy signalAllAcceptedCredentials(options)
định kỳ, chẳng hạn như trong mỗi lần đăng nhập, để đảm bảo rằng tất cả các thông tin xác thực đều được cập nhật.allAcceptedCredentialIds
). Các thông tin xác thực không được bao gồm trong danh sách này có thể bị ẩn hoặc xóa bởi trình xác thực, có khả năng không thể khôi phục. Để ngăn các thông tin xác thực hợp lệ bị bỏ sót nhầm, điều quan trọng là phải đảm bảo danh sách đầy đủ. Nếu một ID thông tin xác thực hợp lệ vô tình bị bỏ sót, nó nên được thêm lại vào signalAllAcceptedCredentials(options)
càng sớm càng tốt để làm cho nó hiển thị trở lại, giả sử trình xác thực hỗ trợ điều này.Trong ảnh chụp màn hình ở trên, bạn có thể thấy cách Google Chrome báo hiệu việc xóa. WebAuthn Signal API là một phần của Chrome 132 và có thể được thử nghiệm với Google Password Manager trên máy tính để bàn.
Để triển khai hiệu quả WebAuthn Signal API và đảm bảo đồng bộ hóa liền mạch metadata của passkey trên các trình xác thực phía client, hãy xem xét các khuyến nghị sau:
signalAllAcceptedCredentials(options)
sau mỗi lần đăng nhập thành công: Cách tiếp cận này đảm bảo rằng tất cả metadata và Credential ID được cập nhật trong một phương thức duy nhất, đơn giản hóa quy trình và duy trì tính nhất quán trên các thiết bị và nền tảng, đồng thời vô hiệu hóa các thông tin xác thực đã bị xóa hoặc lỗi thời.signalUnknownCredential(options)
cho các triển khai quy mô lớn: Cân nhắc sử dụng nhắn tin thời gian thực với phương thức signalUnknownCredential(options)
trong các triển khai quy mô lớn hoặc khi có nhu cầu cập nhật ngay lập tức. Phương pháp này có thể nâng cao hiệu quả và độ chính xác của việc quản lý thông tin xác thực, đảm bảo rằng các thông tin xác thực không hợp lệ hoặc lỗi thời được xóa kịp thời khỏi giao diện lựa chọn.Bằng cách làm theo các khuyến nghị này, bạn có thể triển khai WebAuthn Signal API một cách hiệu quả khi nó được hỗ trợ, đảm bảo rằng metadata của passkey luôn được cập nhật và nhất quán trên tất cả các trình xác thực phía client, từ đó cung cấp trải nghiệm người dùng mượt mà và an toàn cho passkey.
Tiêu chuẩn WebAuthn đang liên tục phát triển, trở nên phong phú hơn về tính năng hàng tháng. Sự ra đời của WebAuthn Signal API là một bước tiến quan trọng trong việc quản lý metadata và việc xóa passkey trên các trình xác thực phía client. API này giải quyết các trường hợp sử dụng quan trọng là giữ cho thông tin được đồng bộ giữa các bên tin cậy (RP) và trình xác thực, và đảm bảo rằng các passkey không hợp lệ hoặc lỗi thời được xóa, từ đó cải thiện trải nghiệm người dùng.
user.name
và user.displayName
lỗi thời, có thể gây nhầm lẫn khi thông tin xác thực được trình bày trong giao diện lựa chọn. Ngoài ra, nó giúp duy trì một giao diện lựa chọn thông tin xác thực sạch sẽ và an toàn bằng cách xóa các passkey đã bị thu hồi hoặc xóa.Khi tiêu chuẩn WebAuthn phát triển, nó được hưởng lợi từ sự đa dạng về lợi ích của những người tham gia, những người thúc đẩy các phần khác nhau của tiêu chuẩn tiến lên. Việc theo dõi những phát triển này là rất quan trọng để luôn cập nhật những cải tiến mới nhất và đảm bảo rằng các triển khai vẫn phù hợp với các thực tiễn và tiêu chuẩn tốt nhất mới nhất. Cộng đồng WebAuthn tiếp tục thúc đẩy sự đổi mới, làm cho việc xác thực trở nên an toàn và thân thiện với người dùng hơn.
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents