Tìm hiểu vai trò của API Web Bluetooth đối với passkey! Khám phá cách việc phát hiện tính khả dụng của Bluetooth giúp cải thiện Xác thực chéo thiết bị (CDA) với WebAuthn.
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.
2.2 getDevices()
2.3 requestDevice()
8.1 Tính năng cốt lõi của Passkey: Xác thực chéo thiết bị (CDA) qua Mã QR & Bluetooth
8.2 Bluetooth không phải lúc nào cũng có sẵn và có thể ảnh hưởng xấu đến trải nghiệm người dùng CDA
8.3 Tác động khác nhau của việc không có Bluetooth trên Firefox và Safari
Passkeys là tiêu chuẩn đăng nhập mới trên web. Một trong những tính năng cốt lõi của passkey là Xác thực chéo thiết bị (CDA) qua Bluetooth và Mã QR. Trong bối cảnh này, một API web khác trở nên quan trọng: API Web Bluetooth.
Bằng cách cho phép các ứng dụng web tương tác trực tiếp với các thiết bị Bluetooth, API Web Bluetooth đóng một vai trò quan trọng trong việc đảm bảo các quy trình xác thực an toàn và hiệu quả (đặc biệt là đối với CDA).
Bài viết này sẽ trình bày cách hoạt động của API Web Bluetooth và khám phá những tác động của việc phát hiện Bluetooth đối với xác thực bằng passkey. Chúng ta sẽ cùng trả lời các câu hỏi sau:
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
API Web Bluetooth là một giao diện JavaScript cho phép các ứng dụng web truy cập và giao tiếp với các thiết bị Bluetooth. Nó là một phần của tiêu chuẩn HTML5 và được hỗ trợ bởi các trình duyệt như Chrome, Edge và Opera. API này cho phép các ứng dụng web:
Có ba hàm chính của API Web Bluetooth.
getAvailability()
trả về một promise phân giải thành một giá trị Boolean cho biết liệu user agent có thể hỗ trợ Bluetooth hay không (tức là thiết bị có mô-đun Bluetooth). Một số user agent cho phép người dùng cấu hình một tùy chọn để chỉ định giá trị được trả về bởi phương thức này.
navigator.bluetooth.getAvailability().then((available) => { if (available) { console.log("This device supports Bluetooth!"); } else { console.log("Doh! Bluetooth is not supported"); } });
getDevices()
trả về một promise phân giải thành một mảng các BluetoothDevices
mà origin được phép truy cập (bao gồm cả những thiết bị ngoài phạm vi và đã tắt nguồn). Quyền truy cập được cấp thông qua các lệnh gọi trước đó đến Bluetooth.requestDevice()
.
navigator.bluetooth.getDevices().then((devices) => { devices.forEach((device) => { console.log("Device:", device.name); }); });
requestDevice()
trả về một promise đến một đối tượng BluetoothDevice
với các tùy chọn được chỉ định. Nếu không có giao diện người dùng để chọn, phương thức này sẽ trả về thiết bị đầu tiên khớp với tiêu chí.
navigator.bluetooth .requestDevice({ filters: [ { services: ["battery_service"], }, ], }) .then((device) => { console.log("Device:", device.name); }) .catch((error) => { console.log("Error:", error); });
Chi tiết và các đoạn mã có thể được tìm thấy tại đây. Bạn cũng có thể tìm thấy tiêu chuẩn W3C cho Web Bluetooth tại đây.
navigator.bluetooth.requestDevice
phải được kích hoạt bởi một cử chỉ của người dùng, chẳng hạn như chạm hoặc nhấp chuột, vì lý do bảo mật.Để kiểm tra xem API Web Bluetooth có được hỗ trợ hay không, bạn có thể sử dụng đoạn mã sau:
if ("bluetooth" in navigator) { // Web Bluetooth API is supported console.log("Web Bluetooth is supported!"); } else { // Web Bluetooth API is not supported console.log("Web Bluetooth is not supported!"); }
Cách gọi các hàm cụ thể đã được giải thích ở trên.
API Web Bluetooth mang lại một số lợi ích cho nhà phát triển và người dùng:
Mặc dù có nhiều lợi ích, API Web Bluetooth vẫn có những hạn chế:
getAvailability()
trả về false ngay cả khi có bộ điều hợp Bluetooth. Điều này được kiểm soát thông qua Permissions-Policy:Bluetooth
. Tương tự, ngay cả khi getAvailability()
trả về true, bộ điều hợp Bluetooth có thể không được bật, hoặc người dùng có thể từ chối quyền sử dụng API khi được nhắc.Mức độ áp dụng API Web Bluetooth vẫn đang tăng lên. Tính đến tháng 6 năm 2024, theo Can I Use, 76,53% người dùng toàn cầu có thiết bị hỗ trợ API Web Bluetooth.
Tuy nhiên, việc thiếu hỗ trợ trong Safari và Firefox vẫn là một trở ngại đáng kể, ảnh hưởng đến trải nghiệm người dùng trên các trình duyệt đó. Ngoài ra, một số tính năng (ví dụ: Bluetooth.getDevices()
) phải được người dùng bật một cách rõ ràng, điều này có thể là một thách thức khi sử dụng API ở chế độ nền.
Tìm dữ liệu mới nhất tại: https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API#browser_compatibility
Có một lý do chính tại sao các bên tin cậy nên biết về tính khả dụng của Bluetooth khi họ muốn cung cấp passkey trên trang web và ứng dụng của mình.
Một trong những tính năng mới, đột phá của passkey là Xác thực chéo thiết bị (CDA) – còn được gọi là xác thực kết hợp. Tính năng này cho phép người dùng xác thực trên một thiết bị (thường là máy tính để bàn hoặc máy tính xách tay) bằng thiết bị di động của họ thông qua mã QR và Bluetooth. Phương pháp xác thực kết hợp này giúp tăng cường bảo mật và sự tiện lợi, mang lại trải nghiệm người dùng liền mạch. Hầu hết người dùng không chuyên về kỹ thuật ngày nay đã quen với việc quét mã QR, dù là trong đại dịch COVID để đăng ký hay qua các ứng dụng nhắn tin ưu tiên di động sau đó đã thêm hỗ trợ cho máy tính để bàn (ví dụ: WhatsApp hoặc Telegram).
Việc quyết định một chiến lược CDA là rất quan trọng khi bắt đầu bất kỳ dự án passkey nào. Chúng ta càng phụ thuộc vào CDA, thì sự hỗ trợ và độ tin cậy của nó càng cần phải tốt hơn. Do đó, việc phát hiện tính khả dụng của Bluetooth trên một thiết bị là rất cần thiết.
Tuy nhiên, không phải tất cả các thiết bị đều có khả năng Bluetooth hoặc có thể đã tắt Bluetooth. Đối với các bên tin cậy cung cấp passkey, việc phát hiện tính khả dụng của Bluetooth là rất cần thiết để xác định xem có thể sử dụng CDA hay không hoặc có cần một phương thức xác thực dự phòng khác. API Web Bluetooth cung cấp một giải pháp bằng cách cho phép các ứng dụng web kiểm tra tính khả dụng của Bluetooth trên thiết bị của người dùng.
Hãy nhớ rằng CDA không phải lúc nào cũng ổn định, đôi khi không thể kết nối mà không có lý do rõ ràng. Hơn nữa, do API còn mới, đôi khi API trả về kết quả sai.
Việc API Web Bluetooth không khả dụng trên Firefox và Safari là một vấn đề, đặc biệt là đối với Firefox.
Safari ít đáng lo ngại hơn vì các thiết bị macOS, nơi CDA có thể được thực hiện, đã có Bluetooth tích hợp sẵn từ các mẫu đời đầu. Tuy nhiên, nếu Bluetooth trên macOS không hoạt động, người dùng có thể gặp sự cố với xác thực chéo thiết bị và cần phải khắc phục sự cố cài đặt của họ hoặc quay lại phương thức dự phòng. Các iPhone chạy Safari đã có Bluetooth tích hợp sẵn từ khi ra mắt.
Tuy nhiên, Firefox là một vấn đề đáng kể vì nó phổ biến trên các thiết bị Windows. Nếu người dùng đang sử dụng Firefox và muốn dùng CDA, bên tin cậy không thể xác định một cách đáng tin cậy liệu Bluetooth có khả dụng hay không, vì API Web Bluetooth không được triển khai. Điều này có thể dẫn đến trải nghiệm người dùng kém, người dùng có thể bị kẹt ở một số điểm mà không biết phải làm gì.
Như chúng ta đã thấy trong các bài viết trước, các thiết bị Windows đang tụt hậu về mức độ áp dụng passkey (xem thêm State of Passkeys). Hãy cùng xem xét mức độ phổ biến của tính khả dụng Bluetooth.
Windows 10 không có yêu cầu nghiêm ngặt về Bluetooth, nhưng hầu hết các máy tính xách tay và máy tính để bàn hiện đại đều có khả năng Bluetooth. Tuy nhiên, người dùng có thể đã tắt nó, hoặc nó có thể không khả dụng trong một số cấu hình, đặc biệt là trên các máy tính để bàn tự lắp ráp.
Windows 11, tương tự như Windows 10, không bắt buộc phải có Bluetooth. Tuy nhiên, xu hướng hướng tới phần cứng tích hợp và hiện đại hơn có nghĩa là hầu hết các thiết bị tương thích với Windows 11 đều có khả năng Bluetooth. Tuy nhiên, người dùng có thể vô hiệu hóa nó, ảnh hưởng đến việc triển khai CDA.
Trong bảng dưới đây, bạn có thể xem liệu mình có thể xác định được một thiết bị máy tính để bàn có sẵn sàng Bluetooth và do đó có thể được sử dụng làm máy khách CDA hay không:
Hệ điều hành | Hỗ trợ phần cứng Bluetooth | Phát hiện Bluetooth trên trình duyệt | |||
---|---|---|---|---|---|
Chrome | Edge | Firefox | Safari | ||
Windows 10 | thấp | ✅ | ✅ | ❌ | ❌ |
Windows 11 | trung bình | ✅ | ✅ | ❌ | ❌ |
macOS | cao | ✅ | ❌ | ❌ | ❌ |
Hãy nhớ rằng ngay cả khi phần cứng của bạn đã sẵn sàng cho Bluetooth, chức năng Bluetooth có thể bị người dùng tắt. Khi Bluetooth bị tắt, người dùng vẫn có thể sử dụng CDA vì họ vẫn có thể chọn bật nó lên, điều này hoạt động cho cả Windows và Mac: Yêu cầu bật Bluetooth trên macOS
Yêu cầu bật Bluetooth trên Windows 11
Thông tin về tính khả dụng của Bluetooth đặc biệt thú vị trên Windows 10 và Windows 11, nơi hỗ trợ Bluetooth thấp hơn và có khả năng rất cao là xác thực chéo thiết bị sẽ cần phải diễn ra (trong một lần đăng nhập dựa trên passkey). Các thiết bị macOS gần đây đều hỗ trợ Bluetooth. Các thiết bị macOS này cũng có khả năng truy cập trực tiếp vào các passkey được lưu trữ trong iCloud Keychain, vì vậy chúng không phải là mối quan tâm.
Trên Windows 10 và Windows 11: Hãy sử dụng getAvailability()
để xem Bluetooth có hoạt động được không. Trong trường hợp người dùng chỉ có passkey không phải của Windows, chúng ta có thể ngay lập tức chuyển sang các phương thức xác thực khác.
Trong tình huống chỉ có sẵn các passkey kết hợp, việc kích hoạt xác thực bằng passkey sẽ không dẫn đến một lần xác thực thành công, mà thay vào đó là một ngõ cụt cho người dùng. Đối với tất cả các trình duyệt khác trên Windows 10 và Windows 11, thật không may, không có cách nào khác để tìm hiểu xem có hỗ trợ cho CDA hay không.
API Web Bluetooth đại diện cho một công cụ mạnh mẽ để tăng cường xác thực bằng passkey thông qua các khả năng của Bluetooth. Bằng cách hiểu và tận dụng API này, các nhà phát triển có thể tạo ra các phương thức xác thực an toàn và thân thiện với người dùng hơn. Tuy nhiên, họ cũng phải điều hướng các hạn chế của nó và đảm bảo các cơ chế dự phòng mạnh mẽ để duy trì trải nghiệm người dùng liền mạch trên các trình duyệt và thiết bị khác nhau.
Với bài viết này, chúng ta đã đưa ra câu trả lời cho ba câu hỏi cốt lõi:
getAvailability()
, getDevices()
và requestDevice()
để kiểm tra hỗ trợ Bluetooth, liệt kê các thiết bị có thể truy cập và yêu cầu ghép nối thiết bị.Để biết thêm thông tin về API Web Bluetooth và một bộ sưu tập các ví dụ, vui lòng nhấp vào đây.
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