Bài viết này giải thích cách triển khai passkey trong các ứng dụng gốc (iOS + Android). Bạn sẽ tìm hiểu loại WebView nào được khuyến nghị cho việc xác thực bằng passkey.
Vincent
Created: June 20, 2025
Updated: January 30, 2026

See the original blog version in English here.
+70-page Enterprise Passkey Whitepaper:
Learn how leaders get +80% passkey adoption. Trusted by Rakuten, Klarna & Oracle
| Phương pháp | Mức độ chấp nhận | Tạo Passkey | Sử dụng Passkey | Quản lý Passkey | Độ phức tạp kỹ thuật | Hỗ trợ OAuth |
|---|---|---|---|---|---|---|
| Triển khai Native | 🟢🟢🟢 | Mức độ chấp nhận cao, UX tốt nhất, sinh trắc học liền mạch | Xác thực tức thì, âm thầm | Kiểm soát native hoàn toàn | Trung bình-Cao | Yêu cầu luồng riêng biệt |
| System WebView | 🟢🟢 | Mức độ chấp nhận tốt, trải nghiệm giống trình duyệt | UX trình duyệt tiêu chuẩn, chia sẻ keychain | Quản lý dựa trên trình duyệt | Thấp | Xuất sắc |
| Embedded WebView | 🟢 | Mức độ chấp nhận thấp hơn, cần thiết lập nhiều hơn | Hỗ trợ native trên iOS & Android (WebKit 1.12.1+), không có Conditional UI | Kiểm soát hạn chế | Trung bình-Cao | Không áp dụng |
Lưu ý: System WebView và Embedded WebView thường được kết hợp, trong đó System WebView xử lý việc đăng nhập (với chia sẻ thông tin xác thực tự động), sau đó Embedded WebView hiển thị phần quản lý passkey trong cài đặt.
Các yếu tố quyết định chính:
Các nền tảng di động hiện đại cung cấp ba phương pháp riêng biệt để tích hợp passkey vào ứng dụng gốc của bạn, mỗi phương pháp có những đánh đổi khác nhau về trải nghiệm người dùng, độ phức tạp kỹ thuật và khả năng tương thích với OAuth:
Triển khai Native: Xây dựng các luồng passkey trực tiếp vào ứng dụng của bạn bằng cách sử dụng API của nền tảng (iOS AuthenticationServices, Android Credential Manager). Cung cấp trải nghiệm người dùng tốt nhất với xác thực sinh trắc học liền mạch, nhưng đòi hỏi nỗ lực triển khai kỹ thuật từ trung bình đến cao.
System WebView: Sử dụng thành phần trình duyệt của nền tảng (iOS ASWebAuthenticationSession / SFSafariViewController, Android Chrome Custom Tabs) để xử lý xác thực. Rất phù hợp cho các luồng đăng nhập dựa trên OAuth và chia sẻ thông tin xác thực với trình duyệt hệ thống.
Embedded WebView: Nhúng một web view có thể tùy chỉnh (iOS WKWebView, Android WebView) vào ứng dụng của bạn để tái sử dụng xác thực web với một bộ khung ứng dụng gốc. Cung cấp giao diện giống native mà không có thanh URL và toàn quyền kiểm soát giao diện người dùng của web view. Yêu cầu thiết lập bổ sung bao gồm quyền và entitlements (iOS), và cấu hình WebView với AndroidX WebKit 1.12.1+ (Android) để kích hoạt chức năng passkey.
Lựa chọn đúng đắn phụ thuộc vào kiến trúc xác thực của ứng dụng, liệu bạn có sử dụng các nhà cung cấp OAuth hay không, mức độ kiểm soát bạn cần đối với giao diện người dùng và liệu bạn đang xây dựng một ứng dụng ưu tiên native hay tái sử dụng các thành phần web.
Recent Articles
📖
Nhà cung cấp Passkey: loại, AAGUID & triển khai
🔑
Bằng Lái Xe Di Động đã ra mắt: Hướng dẫn toàn diện về mDL
📖
WebAuthn Related Origins: Hướng dẫn sử dụng Passkey trên nhiều tên miền
⚙️
WebAuthn Transports: Giải Thích Về Phương Thức Internal và Hybrid
🔑
Làm thế nào để chuyển đổi hoàn toàn sang không mật khẩu
Một triển khai passkey native mang lại trải nghiệm người dùng tối ưu, với các luồng xác thực được xây dựng trực tiếp vào giao diện người dùng của ứng dụng bằng cách sử dụng các API dành riêng cho nền tảng. Người dùng được hưởng lợi từ các hộp thoại native của nền tảng, xác minh sinh trắc học liền mạch và thời gian đăng nhập nhanh nhất có thể.
Khi nào nên chọn Triển khai Native:
preferImmediatelyAvailableCredentials để tự động hiển thị lớp phủ passkey khi có
passkey, cung cấp trải nghiệm đăng nhập nhanh nhất mà không cần nhập định danhLợi thế chính: preferImmediatelyAvailableCredentials()
Các triển khai native có thể tận dụng preferImmediatelyAvailableCredentials() để tạo ra
một lớp phủ passkey tự động xuất hiện ngay khi ứng dụng khởi động khi có passkey. Luồng
không cần tên người dùng này cung cấp trải nghiệm đăng nhập nhanh nhất có thể—người dùng
thấy passkey của họ ngay lập tức mà không cần nhập định danh trước. Khả năng này chỉ có
ở các triển khai native và không có sẵn trong các biến thể WebView.
Mặc dù các triển khai WebView có thể sử dụng Conditional UI (gợi ý passkey trong các trường nhập liệu), lớp phủ tự động của native cung cấp UX vượt trội với tỷ lệ sử dụng passkey cao hơn vì xác thực bắt đầu ngay khi ứng dụng khởi chạy.
Tổng quan về Yêu cầu Kỹ thuật:
Việc tích hợp passkey native đòi hỏi sự tin cậy mật mã giữa ứng dụng và miền web của bạn. Nếu không, hệ điều hành sẽ từ chối tất cả các hoạt động WebAuthn. Các yêu cầu chính:
/.well-known/Lợi ích lớn nhất: passkey được tạo trên trang web của bạn sẽ hoạt động liền mạch trong ứng dụng của bạn và ngược lại.
Việc triển khai passkey một cách native trên iOS liên quan đến framework AuthenticationServices của Apple, cung cấp một API cho các hoạt động WebAuthn:
Các thành phần chính:
ASAuthorizationController: Quản lý luồng xác thựcASAuthorizationPlatformPublicKeyCredentialProvider: Tạo yêu cầu passkeyMẹo phát triển
?mode=developer vào URL AASA của bạn để buộc làm mớiViệc triển khai passkey native của Android sử dụng API Credential Manager (hoặc API FIDO2 cũ hơn để tương thích ngược):
Các thành phần chính:
CredentialManager: API trung tâm cho tất cả các hoạt động về thông tin xác thựcCreatePublicKeyCredentialRequest: Dành cho việc đăng ký passkeyGetCredentialRequest: Dành cho việc xác thực bằng passkeyLưu ý: Android hiện thiếu các gợi ý bàn phím Conditional UI của iOS trong các ứng dụng native (mặc dù Conditional UI hoạt động trong các ứng dụng web)
Việc triển khai passkey một cách native có những thách thức và bài học quan trọng: Việc tích hợp ở cấp độ hệ điều hành có thể làm phát sinh các vấn đề trên các thiết bị và phiên bản hệ điều hành khác nhau.
Trong khi bạn có thể triển khai passkey bằng cách sử dụng các API thô của nền tảng, các SDK được xây dựng chuyên dụng giúp tăng tốc đáng kể quá trình phát triển bằng cách xử lý sự phức tạp của WebAuthn, các trường hợp đặc biệt và cung cấp τηλεμετρία tích hợp sẵn. Các SDK cũng cung cấp các giao diện có thể mô phỏng (mockable) để kiểm thử đơn vị (rất quan trọng vì bạn không thể kiểm thử sinh trắc học trong trình giả lập).
Khuyến nghị: Đối với các triển khai native, chúng tôi khuyên bạn nên sử dụng SDK của Corbado (SDK Passkey iOS Swift, SDK Passkey Android Kotlin để xử lý vô số trường hợp đặc biệt được phát hiện qua các lần triển khai sản phẩm, cung cấp thêm τηλεμετρία và kiểm thử.
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
Corbado proved to be a trusted partner. Their hands-on, 24/7 support and on-site assistance enabled a seamless integration into VicRoads' complex systems, offering passkeys to 5 million users.
Passkey được hàng triệu người chấp nhận, nhanh chóng. Bắt đầu với Nền tảng chấp nhận của Corbado.
Bắt đầu dùng thử miễn phíSystem WebView sử dụng thành phần trình duyệt native của nền tảng để xử lý xác thực trong ứng dụng của bạn. Không giống như các triển khai hoàn toàn native, System WebView hiển thị nội dung web bằng trình duyệt hệ thống thực tế (Safari trên iOS, Chrome trên Android), duy trì cookie được chia sẻ, thông tin xác thực đã lưu và các chỉ báo bảo mật quen thuộc của trình duyệt.
Khi nào nên chọn System WebView:
Lợi thế chính:
Thành phần nền tảng:
ASWebAuthenticationSession (khuyến nghị cho các luồng xác thực) hoặc
SFSafariViewController (duyệt web thông thường)Các công ty lớn như Google và GitHub đã áp dụng cách tiếp cận này để thêm tính năng đăng nhập bằng passkey vào ứng dụng di động của họ thông qua các lớp phủ WebView trên các trang xác thực web hiện có. Điều này hoạt động tốt khi việc xây dựng lại xác thực hoàn toàn bằng native không khả thi ngay lập tức.
iOS cung cấp hai thành phần System WebView chính để xác thực:
ASWebAuthenticationSession (Khuyến nghị để xác thực):
SFSafariViewController (Duyệt web thông thường):
| Tính năng | ASWebAuthenticationSession | SFSafariViewController |
|---|---|---|
| Trường hợp sử dụng chính | Luồng xác thực | Duyệt web thông thường |
| OAuth/OIDC | Xuất sắc | Tốt |
| Hỗ trợ Passkey | Có | Có |
| Tùy biến | Hạn chế | Tối thiểu |
Nếu ứng dụng của bạn sử dụng đăng nhập dựa trên OAuth, ASWebAuthenticationSession là
lựa chọn được khuyến nghị vì nó được thiết kế đặc biệt cho các kịch bản xác thực và cung
cấp sự cân bằng tốt nhất giữa bảo mật và trải
nghiệm người dùng.
Chrome Custom Tabs (CCT) cung cấp trải nghiệm xác thực được hỗ trợ bởi Chrome trong ứng dụng của bạn:
Các tính năng chính:
Tích hợp OAuth: Chrome Custom Tabs là phiên bản tương đương của ASWebAuthenticationSession trên iOS, cung cấp hỗ trợ OAuth xuất sắc trong khi vẫn duy trì quyền truy cập vào các passkey đã lưu.
Want to try passkeys yourself in a passkeys demo?
Embedded WebView cung cấp toàn quyền kiểm soát việc hiển thị nội dung web trong ứng dụng của bạn, cho phép thao tác trực tiếp với cookie, phiên và điều hướng mà không có thanh URL. Tuy nhiên, quyền kiểm soát này đi kèm với các yêu cầu kỹ thuật bổ sung để kích hoạt chức năng passkey.
Khi nào nên chọn Embedded WebView:
Bối cảnh quan trọng:
Nhiều ứng dụng sử dụng phương pháp kết hợp: System WebView xử lý xác thực OAuth ban đầu (nơi passkey hoạt động liền mạch), sau đó chuyển sang Embedded WebView sau xác thực để quản lý passkey trong phần cài đặt. Thách thức phát sinh khi cố gắng sử dụng passkey trực tiếp trong Embedded WebView.
Yêu cầu kỹ thuật:
Embedded WebView yêu cầu thiết lập bổ sung so với System WebView:
Thành phần nền tảng:
WKWebViewandroid.webkit.WebViewĐánh đổi:
Khi triển khai passkey qua WebView, việc hiểu rõ sự khác biệt giữa System WebView và Embedded WebView là rất quan trọng. Ba phương pháp được nêu ở trên (Triển khai Native, System WebView và Embedded WebView) mỗi phương pháp phục vụ cho các trường hợp sử dụng khác nhau.
Trên iOS, bạn có nhiều tùy chọn để hiển thị nội dung web trong ứng dụng:
Trên Android, các lựa chọn chính là:
android.webkit.WebView), về cơ bản
là một trình duyệt mini có thể được nhúng vào các activity của bạn. Nó rất dễ tùy chỉnh
nhưng chạy trong tiến trình của ứng dụng bạn.Trong các phần sau, chúng ta sẽ tìm hiểu sâu hơn về các loại WebView này cho iOS và Android, và thảo luận xem loại nào có thể phù hợp nhất cho các luồng xác thực bằng passkey.
Subscribe to our Passkeys Substack for the latest news.
Nền tảng của Apple cung cấp ba tùy chọn WebView được liệt kê ở trên. Lựa chọn của bạn sẽ ảnh hưởng đến mức độ mượt mà của việc sử dụng passkey trong ứng dụng:
Để kiểm tra hành vi của các WebView khác nhau trên iOS, chúng tôi khuyên dùng ứng dụng WebView - WKWebView and UIWebView rendering.
WKWebView là một thành phần WebView đa năng cho iOS. Các nhà phát triển có thể nhúng một WKWebView để hiển thị nội dung web với mức độ kiểm soát cao về giao diện người dùng và hành vi. WKWebView sử dụng cùng một công cụ hiển thị như Safari, vì vậy nó rất hiệu quả và hỗ trợ các tính năng web hiện đại. Về lý thuyết, WKWebView có thể xử lý WebAuthn (và do đó là passkey) nếu được cấu hình đúng cách, nhưng lưu ý rằng một số tính năng trình duyệt nâng cao có thể bị hạn chế vì lý do bảo mật. Một điều cần chú ý là WKWebView theo mặc định không chia sẻ cookie hoặc dữ liệu keychain với Mobile Safari. Người dùng có thể phải đăng nhập lại vì phiên WebView của họ bị cô lập khỏi phiên của Safari. Ngoài ra, vì nội dung WKWebView có thể được tùy chỉnh hoàn toàn bởi ứng dụng, người dùng không nhìn thấy thanh địa chỉ hoặc giao diện người dùng Safari – điều này rất tốt cho việc xây dựng thương hiệu, nhưng nó có nghĩa là người dùng có ít tín hiệu hơn để xác minh tính hợp pháp của trang (một mối lo ngại về chống lừa đảo (phishing)). Một số ứng dụng thậm chí đã lạm dụng WKWebView để chèn script hoặc thay đổi nội dung (ví dụ: TikTok đã được ghi nhận là chèn JS theo dõi qua trình duyệt trong ứng dụng của họ), vì vậy cần phải cẩn thận khi sử dụng WKWebView một cách an toàn và đáng tin cậy cho người dùng.
SFSafariViewController cung cấp trải nghiệm Safari trong ứng dụng. Khi bạn mở một URL bằng SFSafariViewController, nó gần giống như mở nó trong trình duyệt Safari thực, ngoại trừ việc người dùng vẫn ở trong giao diện người dùng của ứng dụng bạn. Lợi thế cho passkey là rất đáng kể: vì về cơ bản nó là Safari, iCloud Keychain và các passkey đã lưu của người dùng đều có thể truy cập được. Lưu ý rằng cookie không được chia sẻ trên iOS 11+. Điều này có nghĩa là nếu người dùng đã có passkey cho trang web của bạn, Safari có thể tìm thấy nó và thậm chí hiển thị tự động hoàn thành Conditional UI để đăng nhập dễ dàng. SFSafariViewController ít tùy chỉnh hơn (bạn không thể thay đổi nhiều thanh công cụ của nó), nhưng nó tự động xử lý rất nhiều tính năng bảo mật và quyền riêng tư. Thanh URL được hiển thị, hoàn chỉnh với biểu tượng ổ khóa cho HTTPS, điều này mang lại cho người dùng sự tự tin rằng họ đang ở đúng tên miền. Nói chung, SFSafariViewController được coi là an toàn hơn một WKWebView thô và đơn giản hơn để triển khai (Apple cung cấp nó dưới dạng thả vào). Sự đánh đổi chính là bạn hy sinh một số quyền kiểm soát về giao diện và cảm nhận. Đối với một luồng xác thực, điều đó thường có thể chấp nhận được. Ưu tiên ở đây là bảo mật và dễ dàng đăng nhập, điều mà SFSafariViewController thực hiện xuất sắc bằng cách sử dụng ngữ cảnh của Safari.
| WKWebView | SFSafariViewController | |
|---|---|---|
| Trải nghiệm người dùng | - Cảm giác native: Người dùng có thể cảm thấy rằng nội dung web là một phần gốc của ứng dụng vì các nhà phát triển có thể tùy chỉnh giao diện và cảm nhận để phù hợp với thiết kế của ứng dụng. - Tự động điền: Có thể tự động điền dữ liệu từ Safari | - Liền mạch: Trải nghiệm người dùng liền mạch sử dụng cài đặt Safari của người dùng, đảm bảo duyệt web nhất quán giữa ứng dụng gốc và trình duyệt. |
| Trải nghiệm nhà phát triển | - Tùy biến cao: Có sẵn nhiều tùy chọn tùy chỉnh và cấu hình - Linh hoạt: Nhiều API để tương tác với nội dung web | - Tùy biến trung bình: Tùy chọn tùy chỉnh hạn chế, đặc biệt so với WKWebView, - Đơn giản: Dễ triển khai hơn so với WKWebView |
| Hiệu suất | - Khá chậm: Tùy thuộc vào việc triển khai và nội dung web, tốc độ tải có thể được tối ưu hóa, nhưng vẫn có thể chậm hơn so với SFSafariViewController do quá trình xử lý bổ sung các tính năng và tương tác tùy chỉnh. | - Khá nhanh: Thường cung cấp hiệu suất tốt hơn vì nó tận dụng công cụ Safari, được tối ưu hóa cho tốc độ và hiệu quả, cung cấp thời gian tải trang web nhanh chóng. |
| Tin cậy và nhận diện | - Không yêu cầu hiển thị URL: WKWebView thường không hiển thị URL, khiến người dùng khó xác minh trang web hơn. Có khả năng các ứng dụng độc hại bắt chước hành vi này và lừa đảo thông tin xác thực. | - Trải nghiệm giống trình duyệt: Hiển thị các trang web bằng Safari, cung cấp trải nghiệm "giống như trình duyệt". Người dùng có thể xem URL và truy cập các tính năng tự động điền của Safari, có khả năng tạo ra nhiều sự tin tưởng hơn do giao diện quen thuộc. |
| Cách ly | - Tách biệt: Cookie và phiên được tách biệt khỏi Safari; người dùng sẽ không được tự động đăng nhập vào WKWebView. | - Tách biệt: Cookie và phiên được tách biệt khỏi Safari; người dùng cũng sẽ không được tự động đăng nhập vào SFSafariViewController. |
| Lỗ hổng | - An toàn: Vốn đã an toàn do sandbox ứng dụng của Apple, nhưng hành vi và bảo mật phụ thuộc vào việc triển khai của ứng dụng. Có khả năng tồn tại lỗ hổng nếu không được triển khai đúng cách. | - An toàn hơn: Hưởng lợi từ các tính năng bảo mật tích hợp của Safari, bao gồm cảnh báo chống lừa đảo và trang web độc hại. Thường được coi là an toàn hơn để hiển thị nội dung web so với WKWebView do các tính năng này và sự quen thuộc của người dùng với Safari. |
| Khác | - Các tính năng không khả dụng: Một số tính năng của trình duyệt (ví dụ: WebAuthn) có thể không thể truy cập đầy đủ do lo ngại về bảo mật và WKWebView chạy trong ngữ cảnh ứng dụng. - Chèn JavaScript: Một số ứng dụng, ví dụ: TikTok chèn JavaScript theo dõi vào WKWebView trong ứng dụng của họ, hoặc hạn chế quyền kiểm soát của người dùng (ví dụ: Facebook) - Vấn đề về quyền riêng tư: Nhiều phản hồi từ cộng đồng liên quan đến quyền riêng tư | - Không chèn JavaScript: Không cho phép thực thi JavaScript từ ứng dụng, tăng cường bảo mật và quyền riêng tư. Nó cũng không hỗ trợ các cảnh báo hoặc xác nhận JavaScript, có khả năng ảnh hưởng đến trải nghiệm người dùng trên một số trang web nhất định. - Chế độ đọc: Cung cấp chế độ đọc cho phiên bản bài viết sạch sẽ, dễ đọc. |
SFAuthenticationSession / ASWebAuthenticationSession – Các lớp này (lớp sau là tên mới thân thiện với Swift) được xây dựng đặc biệt cho các luồng đăng nhập như OAuth hoặc OpenID Connect. Khi bạn cần xác thực người dùng qua một trang web (có thể là đến một IdP bên ngoài), các phiên này là lựa chọn được khuyến nghị trên iOS. Chúng rất giống với SFSafariViewController ở chỗ chúng sử dụng trình duyệt Safari ngầm và chia sẻ cookie/bộ nhớ với Safari. Sự khác biệt chính là SFAuthenticationSession sẽ luôn nhắc người dùng rằng ứng dụng muốn xác thực bằng một trang web (để người dùng nhận biết) và nó sẽ tự động sử dụng phiên Safari hiện có của người dùng nếu có.
Lợi ích là một trải nghiệm SSO liền mạch – nếu người dùng đã đăng nhập vào nhà cung cấp trong Safari, phiên này có thể sử dụng cookie đó để tránh một lần đăng nhập khác. Đối với passkey, điều này quan trọng vì nó có nghĩa là bất kỳ thông tin xác thực passkey nào được lưu trữ trong Safari/iCloud Keychain cũng có thể được sử dụng ở đây. Hướng dẫn chính thức của Apple là sử dụng ASWebAuthenticationSession cho bất cứ điều gì trông giống như một luồng đăng nhập. Ưu điểm là tăng cường quyền riêng tư (ứng dụng của bạn không bao giờ thấy thông tin xác thực hoặc cookie, Safari sẽ xử lý) và hỗ trợ SSO tích hợp. Nhược điểm là nó chỉ giới hạn trong các luồng xác thực (bạn sẽ không sử dụng nó để chỉ hiển thị nội dung web tùy ý trong ứng dụng của mình). Tóm lại, nếu bạn chọn phương pháp WebView trên iOS, ASWebAuthenticationSession thường là lựa chọn tốt nhất để triển khai passkey vì nó an toàn, chia sẻ trạng thái với Safari và được xây dựng chuyên dụng cho việc xác thực.
Want to find out how many people use passkeys?
Trên Android, quyết định về WebView là giữa WebView cổ điển và Chrome Custom Tabs:
Để kiểm tra hành vi của các WebView khác nhau trên Android, chúng tôi khuyên dùng ứng dụng WebView vs Chrome Custom Tabs.
Android WebView (android.webkit.WebView) là một thành phần cho phép bạn nhúng các trang web vào bố cục activity của mình. Nó tương tự như WKWebView ở chỗ nó cho phép bạn toàn quyền kiểm soát: bạn có thể chặn điều hướng, chèn JavaScript, tùy chỉnh giao diện người dùng, v.v. Nó cũng chạy trong tiến trình của ứng dụng bạn. Sử dụng WebView cho passkey có nghĩa là ứng dụng của bạn tải trang đăng nhập web của bạn, và trang đó có thể khởi tạo một nghi thức passkey WebAuthn. Android WebView hiện đại có hỗ trợ WebAuthn (với điều kiện là việc triển khai WebView của thiết bị được cập nhật thông qua Android System WebView hoặc thành phần Chrome). Một cân nhắc lớn: theo mặc định, một Android WebView không chia sẻ cookie hoặc thông tin xác thực đã lưu với trình duyệt Chrome của người dùng. Vì vậy, bất kỳ passkey nào được tạo hoặc sử dụng trong WebView có thể không được Chrome biết đến, và ngược lại. Sự cô lập này có thể tốt cho bảo mật (ứng dụng của bạn không thể đọc cookie trình duyệt), nhưng nó có thể buộc người dùng phải đăng nhập lại nếu họ đã xác thực trong Chrome. Một vấn đề khác là sự tin cậy. Một WebView đơn giản không hiển thị URL hoặc biểu tượng khóa SSL, vì vậy người dùng phải tin tưởng hoàn toàn vào ứng dụng của bạn để không bị lừa đảo. Google thậm chí đã cấm sử dụng WebView cho các lần đăng nhập Google OAuth do rủi ro lừa đảo tiềm ẩn. Về hiệu suất, WebView vẫn ổn, nhưng chúng có thể chậm hơn hoặc tốn nhiều bộ nhớ hơn so với việc sử dụng trình duyệt mặc định của người dùng, đặc biệt là khi tải các trang nặng.
Chrome Custom Tabs (CCT) là một phương pháp kết hợp. Chúng cho phép ứng dụng của bạn mở một trang do Chrome hiển thị trông giống như một phần của ứng dụng bạn. Bạn có thể tùy chỉnh màu thanh công cụ, thêm logo ứng dụng, v.v., nhưng nội dung được hiển thị bởi Chrome trong một tiến trình riêng biệt. Đối với passkey, CCT có một số lợi ích: chúng chia sẻ cookie và thông tin xác thực của người dùng với Chrome, có nghĩa là nếu người dùng có passkey được lưu qua Chrome (Google Password Manager), Custom Tab có thể truy cập nó. Người dùng cũng sẽ thấy URL thực tế và các chỉ báo bảo mật, điều này tạo dựng lòng tin. Hiệu suất thường tốt hơn – Chrome có thể được "làm nóng" trong nền để tải nhanh hơn. Và quan trọng là, bảo mật rất mạnh: vì về cơ bản nó là ứng dụng Chrome, những thứ như Google Safe Browsing bảo vệ phiên, và ứng dụng của bạn không thể chèn các tập lệnh tùy ý vào trang (ngăn chặn một số cuộc tấn công nhất định).
Nhược điểm là nó yêu cầu người dùng phải cài đặt và cập nhật Chrome (hoặc một trình duyệt được hỗ trợ). Hầu hết người dùng Android đều có, nhưng trên một số thiết bị ở một số khu vực nhất định, đây có thể là một vấn đề. Nhìn chung, nếu bạn đi theo hướng web nhúng trên Android, Chrome Custom Tabs được khuyến nghị cho các luồng passkey, vì chúng cung cấp sự cân bằng tốt giữa tích hợp và bảo mật. Thực tế, chúng tương tự như SFSafariViewController/ASWebAuthSession của iOS ở nhiều khía cạnh – tận dụng trình duyệt mặc định để xác thực.
(Ngoài lề: WKWebView so với SFSafariViewController của Apple và WebView so với CCT của Android có nhiều điểm tương đồng. Cả Safari VC và Chrome Tabs đều chia sẻ trạng thái trình duyệt và cung cấp bảo mật tốt hơn, trong khi WKWebView/Android WebView cho phép kiểm soát nhiều hơn nhưng lại cô lập nội dung web. Đối với passkey, việc chia sẻ trạng thái (cookie, kho thông tin xác thực) thường là điều mong muốn để passkey có thể được truy cập và tạo ra một cách liền mạch.)
| Tính năng | WebView | Chrome Custom Tab | |
|---|---|---|---|
| Trải nghiệm người dùng | - Linh hoạt: Cung cấp một bộ API phong phú để tương tác với nội dung web và quản lý tương tác người dùng, bao gồm xử lý các hộp thoại JavaScript và yêu cầu quyền. - Tính nhất quán: Quản lý một UX nhất quán, đặc biệt với nội dung web đa dạng, có thể là một thách thức. | - Tính năng trình duyệt: Chia sẻ các tính năng như Data Saver và AutoComplete được đồng bộ hóa trên các thiết bị. - Nút Quay lại: Cho phép người dùng dễ dàng quay lại ứng dụng bằng một nút quay lại tích hợp. - Phụ thuộc: Dựa vào ứng dụng Chrome, có thể không có sẵn hoặc được cập nhật trên tất cả các thiết bị của người dùng - Chuyển hướng đến trình duyệt: Một số chức năng nhất định có thể chuyển hướng người dùng đến ứng dụng Chrome, có khả năng làm gián đoạn trải nghiệm người dùng. - Custom Tabs một phần: Chỉ một phần của màn hình có thể được sử dụng cho Chrome Custom Tab trong khi phần còn lại hiển thị ứng dụng gốc - Bảng bên: Ở chế độ ngang và trên các thiết bị màn hình lớn, Chrome Custom Tab chỉ được hiển thị ở một bên màn hình, trong khi phần còn lại của màn hình hiển thị ứng dụng gốc | |
| Trải nghiệm nhà phát triển | - Tùy biến cao: Cung cấp/cần nhiều tùy chọn tùy chỉnh. - Tương tác: Cung cấp nhiều API để tương tác với nội dung web và quản lý tương tác người dùng. | - Có thể tùy chỉnh: Cho phép tùy chỉnh màu thanh công cụ, nút hành động, thanh công cụ dưới cùng, các mục menu tùy chỉnh và hoạt ảnh vào/ra. - Callback: Gửi một callback đến ứng dụng khi có điều hướng bên ngoài. - Tính năng bảo mật: Cung cấp các tính năng sẵn có, loại bỏ nhu cầu quản lý yêu cầu, cấp quyền hoặc kho cookie. | |
| Hiệu suất | - Hiệu suất trung bình: Có thể không cung cấp cùng mức hiệu suất như Chrome Custom Tabs (CCT) | - Làm nóng trước: Bao gồm việc làm nóng trước Trình duyệt trong nền và tải các URL một cách suy đoán để tăng cường thời gian tải trang. - Ưu tiên: Ngăn chặn các ứng dụng khởi chạy Custom Tab bị loại bỏ trong quá trình sử dụng bằng cách nâng tầm quan trọng của nó lên mức "foreground". | |
| Tin cậy và nhận diện | - URL & SSL không hiển thị: URL và thông tin SSL không hiển thị sẵn trong WebView. Trừ khi nhà phát triển ứng dụng triển khai các tính năng này, người dùng sẽ không biết họ đang ở đúng trang web hay một trang lừa đảo. | - URL & SSL hiển thị: Sử dụng trình duyệt Chrome thực tế để hiển thị các trang. Người dùng có thể thấy URL và chứng chỉ SSL (cho biết kết nối có an toàn hay không). Điều này có thể mang lại cho người dùng sự tự tin rằng họ không ở trên một trang web lừa đảo. | |
| Cách ly | - Chạy trong tiến trình của ứng dụng: Nếu một ứng dụng có lỗ hổng cho phép thực thi mã độc, có nguy cơ WebView có thể bị xâm phạm. Tuy nhiên, WebView cũng nhận được các bản cập nhật, nhưng hành vi và bảo mật của nó có thể phụ thuộc nhiều hơn vào ứng dụng sử dụng nó. - Không chia sẻ cookie / phiên: Không chia sẻ cookie hoặc phiên với trình duyệt chính của thiết bị, cung cấp sự cách ly nhưng có thể yêu cầu người dùng đăng nhập lại. | - Chạy trong tiến trình của Chrome: Là một phần của Chrome, Custom Tabs chạy trong cùng một tiến trình và có cùng các bản cập nhật bảo mật và tính năng như Chrome. - Chia sẻ kho cookie và mô hình quyền: Đảm bảo người dùng không phải đăng nhập lại vào các trang web hoặc cấp lại quyền. - Cài đặt & Tùy chọn Chrome: Sử dụng cài đặt và tùy chọn của Chrome. | |
| Lỗ hổng | - Callback để đánh cắp thông tin xác thực: Các lỗ hổng tiềm tàng bao gồm việc đôi khi JavaScript được yêu cầu, điều này mở ra cánh cửa cho các ứng dụng khác chạy mã độc, chẳng hạn như đăng ký các callback cố gắng chặn tên người dùng và mật khẩu. - Lừa đảo (Phishing): Ngoài ra, một ứng dụng độc hại có thể mở một trang web khác bắt chước luồng Liên kết trong một nỗ lực lừa đảo. | - Google Safe Browsing: Sử dụng Safe Browsing của Google để bảo vệ cả người dùng và thiết bị khỏi các trang web nguy hiểm. - Trang trí trình duyệt an toàn: Đảm bảo người dùng luôn thấy URL chính xác mà họ đang tương tác và có thể xem thông tin chứng chỉ của trang web, giảm nguy cơ lừa đảo. Hơn nữa, custom tabs không cho phép chèn JavaScript. | |
| Khác | - Google đã cấm WebView để đăng nhập người dùng vào tài khoản Google |
Bất kể bạn chọn phương pháp triển khai nào, một số yêu cầu kỹ thuật nhất định phải được đáp ứng để kích hoạt chức năng passkey. Phần này cung cấp hướng dẫn toàn diện về cách cấu hình các tệp liên kết well-known, entitlements của iOS và cấu hình Android WebView.
Lưu ý về thiết bị được quản lý: Hành vi của Passkey thay đổi đáng kể trên các thiết bị được quản lý nơi các chính sách Quản lý Thiết bị Di động (MDM) kiểm soát việc lưu trữ thông tin xác thực. Để kiểm thử passkey trên các thiết bị được quản lý, hãy xem Passkey trên thiết bị iOS & Android được quản lý.
Các luồng Native và Embedded WebView yêu cầu các tệp liên kết để thiết lập sự tin cậy mật mã giữa ứng dụng và miền web của bạn. System WebView (ASWebAuthenticationSession) và Chrome Custom Tabs không yêu cầu liên kết từ ứng dụng đến trang web.
Tệp AASA thiết lập kết nối giữa ứng dụng iOS và miền web của bạn, cho phép passkey hoạt động trên cả hai nền tảng.
Vị trí tệp: https://yourdomain.com/.well-known/apple-app-site-association
Yêu cầu cấu hình:
/.well-known/apple-app-site-association trên miền của bạnapplication/json.well-knownTệp AASA mẫu:
{ "webcredentials": { "apps": ["TEAMID123.com.example.app"] } }
Bộ nhớ đệm AASA và kiểm thử:
Apple lưu bộ nhớ đệm các tệp AASA rất chặt chẽ (lên đến 24-48 giờ) bằng CDN, điều này có thể gây khó khăn cho việc phát triển và kiểm thử. Để bỏ qua bộ nhớ đệm trong quá trình phát triển:
?mode=developer vào miền liên kết của bạn trong Xcode⚠️ Quan trọng: KHÔNG sử dụng ?mode=developer trong các bản phát hành sản phẩm. Tham
số này chỉ dành cho phát triển—sử dụng nó trong sản phẩm sẽ ngăn iOS phát hiện đúng tệp
AASA của bạn, làm hỏng chức năng passkey.
Xác thực: Sử dụng Trình xác thực AASA của Apple để xác minh cấu hình của bạn.
Android sử dụng Digital Asset Links để xác minh mối quan hệ giữa ứng dụng và trang web của bạn.
Vị trí tệp: https://yourdomain.com/.well-known/assetlinks.json
Yêu cầu cấu hình:
/.well-known/assetlinks.json trên miền của bạnapplication/jsonTệp assetlinks.json mẫu:
[ { "relation": [ "delegate_permission/common.handle_all_urls", "delegate_permission/common.get_login_creds" ], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": [ "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" ] } } ]
Xác thực: Sử dụng Trình tạo Digital Asset Links của Google để tạo và xác minh cấu hình của bạn.
Các ứng dụng iOS yêu cầu các entitlements phù hợp để truy cập chức năng passkey. Các yêu cầu khác nhau một chút dựa trên phương pháp triển khai của bạn.
Tệp entitlements (thường có tên là Runner.entitlements trong các ứng dụng
Flutter hoặc YourApp.entitlements trong các dự án iOS
native) xác định các quyền và khả năng đặc biệt được cấp bởi hệ thống của Apple. Đối với
passkey, tệp này cấu hình Associated Domains.
Vị trí tệp: Thường trong dự án Xcode của bạn tại ios/Runner/Runner.entitlements
Triển khai Native và Embedded WebView yêu cầu khả năng Associated Domains để liên kết ứng dụng của bạn với miền web. System WebView (ASWebAuthenticationSession) không yêu cầu điều này vì nó chạy trong ngữ cảnh Safari.
Thiết lập trong Xcode:
webcredentials:Cấu hình mẫu:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>webcredentials:yourdomain.com</string> <string>webcredentials:subdomain.yourdomain.com</string> </array> </dict> </plist>
| Phương pháp | Yêu cầu Associated Domains | Cấu hình bổ sung |
|---|---|---|
| Triển khai Native | Có | Triển khai chuyên dụng |
| System WebView | Không yêu cầu | Thiết lập web mặc định hoạt động |
| Embedded WebView | Có | Yêu cầu cấu hình AndroidX WebKit 1.12.1+ |
Nhiều miền: Nếu ứng dụng của bạn cần hoạt động với nhiều miền, bạn có thể cần Related Origin Requests (ROR).
Android Embedded WebView đã có hỗ trợ WebAuthn native với AndroidX WebKit 1.12, loại bỏ nhu cầu về mã cầu nối JavaScript tùy chỉnh. System WebView (Chrome Custom Tabs) không yêu cầu cấu hình nào - thông tin xác thực hoạt động tự động.
Yêu cầu:
Triển khai:
import androidx.webkit.WebSettingsCompat import androidx.webkit.WebViewFeature // Kiểm tra xem Web Authentication có được hỗ trợ không if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { // Bật Web Authentication WebSettingsCompat.setWebAuthenticationSupport( webView.settings, WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP ) // Bật JavaScript webView.settings.javaScriptEnabled = true }
Điểm chính:
WebViewFeature.WEB_AUTHENTICATION tại
thời điểm chạymediation:"conditional" (tự động điền passkey
trong các trường nhập liệu) không hoạt động trong Embedded WebViewLưu ý về phiên bản:
Trước AndroidX WebKit 1.12.0, không có hỗ trợ WebAuthn native trong Embedded WebView. Các nhóm phải:
Nếu bạn cần hỗ trợ các phiên bản Android cũ hơn hoặc các thiết bị không có APK WebView được cập nhật, hãy xem hướng dẫn Tích hợp WebView của Credential Manager trên Android để biết phương pháp mã cầu nối. Tuy nhiên, chúng tôi thực sự khuyên bạn nên sử dụng phương pháp WebKit 1.12.1+ native cho các ứng dụng hiện đại.
Khuyến nghị: Sử dụng hỗ trợ WebAuthn native với AndroidX WebKit 1.12.1+. Nếu không có sẵn tại thời điểm chạy, hãy chuyển sang Chrome Custom Tabs, cung cấp hỗ trợ passkey xuất sắc với thông tin xác thực được chia sẻ.
Khi triển khai passkey trong các ứng dụng gốc, bạn cần thiết lập sự tin cậy giữa ứng dụng và (các) miền web của mình. Phần này đề cập đến cách xử lý các miền đơn lẻ, nhiều miền liên quan (ROR) và cách xác minh các tệp liên kết well-known của bạn được cấu hình đúng cách.
Đối với các ứng dụng sử dụng một miền duy nhất (ví dụ: kayak.com), bạn cần:
webcredentials:kayak.comRelated Origins (ROR) là một tính
năng của WebAuthn cho phép một bộ passkey duy nhất hoạt động trên nhiều miền liên quan (ví
dụ: kayak.com, kayak.de, kayak.co.uk).
ROR sử dụng điểm cuối
/.well-known/webauthn trên mỗi trang web để xác định các miền liên quan, KHÔNG phải tệp
AASA hay assetlinks.
Điểm chính:
/.well-known/webauthn với danh sách các miền liên quanVí dụ cấu hình:
Nếu ứng dụng của bạn hoạt động với kayak.com và kayak.de, cả hai miền phải:
Trước khi đưa vào hoạt động, hãy xác minh các tệp well-known của bạn được cấu hình và có thể truy cập đúng cách. Apple và Google cung cấp các URL kiểm tra dựa trên CDN để kiểm tra tính khả dụng của tệp:
| Miền | Xác minh AASA của Apple | Xác minh Digital Asset Links của Google |
|---|---|---|
| kayak.com | Kiểm tra tệp AASA Kiểm tra xem CDN của Apple có thể truy xuất tệp của bạn không | Kiểm tra assetlinks.json Xác minh Google có thể truy cập asset links của bạn |
| kayak.de | Kiểm tra tệp AASA Kiểm tra xem CDN của Apple có thể truy xuất tệp của bạn không | Kiểm tra assetlinks.json Xác minh Google có thể truy cập asset links của bạn |
Sử dụng các URL kiểm tra này:
?nocache=1 của Apple buộc truy xuất mới, bỏ qua bộ nhớ đệm CDNkayak.com hoặc kayak.de bằng (các) miền của riêng bạn trong các mẫu URL ở
trênLưu ý khi kiểm thử: Đảm bảo tất cả các miền đều có các tệp well-known được cấu hình đúng cách. Một tệp bị thiếu hoặc cấu hình sai trên bất kỳ miền nào cũng có thể làm hỏng chức năng passkey cho miền đó.
Thông tin thêm: WebAuthn Relying Party ID trong ứng dụng gốc
Việc chọn phương pháp triển khai phù hợp phụ thuộc vào kiến trúc xác thực của ứng dụng, yêu cầu OAuth và nhu cầu kiểm soát phiên. Sử dụng cây quyết định này để xác định con đường tốt nhất.
Bắt đầu với những câu hỏi chính này:
Ứng dụng của bạn có sử dụng đăng nhập dựa trên OAuth (OAuth2, OIDC, nhà cung cấp đăng nhập xã hội) không?
ASWebAuthenticationSessionBạn có muốn tái sử dụng xác thực web trong một vỏ ứng dụng giống native (không có thanh URL, kiểm soát giao diện người dùng đầy đủ) không?
WKWebView + entitlements Associated DomainsWebView + cấu hình AndroidX WebKit 1.12.1+Bạn đang xây dựng một ứng dụng gốc mới hay có các màn hình đăng nhập native?
Bạn có xác thực web hiện có mà bạn muốn tái sử dụng không?
Đây là cách mỗi phương pháp hoạt động trên các khía cạnh chính:
| Phương pháp | Tạo Passkey | Sử dụng Passkey | Quản lý Passkey | Độ phức tạp kỹ thuật | Hỗ trợ OAuth | Thời gian thiết lập |
|---|---|---|---|---|---|---|
| Triển khai Native | Chấp nhận cao Sinh trắc học liền mạch, UX tốt nhất | Tức thì, âm thầmpreferImmediatelyAvailableCredentials cho phép lớp phủ tự động khi khởi động ứng dụng | Kiểm soát native hoàn toàn Tích hợp với cài đặt ứng dụng | Trung bình-Cao API riêng của nền tảng | Yêu cầu triển khai luồng OAuth riêng | Vài tuần đến vài tháng |
| System WebView | Chấp nhận tốt Trải nghiệm giống trình duyệt, quen thuộc | UX trình duyệt tiêu chuẩn Conditional UI trong các trường nhập liệu, chia sẻ keychain | Dựa trên trình duyệt Người dùng quản lý qua trình duyệt | Thấp Mã native tối thiểu | Xuất sắc Được xây dựng cho OAuth | Vài ngày đến vài tuần |
| Embedded WebView | Chấp nhận thấp hơn Yêu cầu cấu hình | Hỗ trợ WebAuthn native WebKit 1.12.1+, không có Conditional UI | Kiểm soát hạn chế Không tích hợp native | Trung bình-Cao Cấu hình WebView + quyền | Yêu cầu cấu hình | 1-2 tuần |
Giải thích các khía cạnh:
Khuyến nghị: System WebView
Nếu ứng dụng của bạn xác thực qua OAuth2, OIDC hoặc các nhà cung cấp đăng nhập xã hội (Google, GitHub, Microsoft, v.v.), System WebView là lựa chọn tối ưu:
ASWebAuthenticationSession được xây dựng chuyên dụng cho các luồng OAuthVí dụ: Các ứng dụng du lịch như kayak.com và kayak.de sử dụng OAuth để xác thực. System WebView cho phép họ duy trì cơ sở hạ tầng OAuth hiện có trong khi thêm hỗ trợ passkey thông qua các trang xác thực web của họ.
Khuyến nghị: Phương pháp kết hợp
Sử dụng System WebView để xác thực OAuth ban đầu, sau đó Embedded WebView cho các phiên sau xác thực:
Khi nào sử dụng: Các ứng dụng xác thực qua OAuth nhưng sau đó cần hiển thị nội dung web đã xác thực nơi yêu cầu thao tác phiên trực tiếp.
Khuyến nghị: Triển khai Native
Xây dựng từ đầu hoặc có các màn hình native? Hãy đi theo hướng hoàn toàn native:
preferImmediatelyAvailableCredentials để hiển thị lớp phủ
passkey tự động khi khởi động ứng dụng - độc quyền cho các triển khai native và cung cấp
tỷ lệ chuyển đổi cao nhấtĐối với ứng dụng mới: Rất khuyến khích xây dựng đăng nhập native ngay từ ngày đầu. Điều này giúp bạn có được UX tối ưu và tránh các cuộc di chuyển từ WebView sang native trong tương lai.
Khuyến nghị: Di chuyển theo giai đoạn
Phương pháp theo giai đoạn này cho phép cải tiến dần dần mà không làm gián đoạn người dùng hiện tại.
| Yêu cầu | Native | System WebView | Embedded WebView |
|---|---|---|---|
| Tệp well-known (AASA/assetlinks) | Yêu cầu | Không yêu cầu | Yêu cầu |
| iOS Associated Domains | Yêu cầu | Không yêu cầu | Yêu cầu |
| Thư viện Android WebKit | Không áp dụng | Không yêu cầu | Yêu cầu (1.12.1+) |
| Relying Party ID | Phải khớp miền | Phải khớp miền | Phải khớp miền |
Xem Phần 5 để biết hướng dẫn cấu hình chi tiết.
Kiểm thử passkey trong các ứng dụng gốc đòi hỏi một phương pháp có cấu trúc, đa tầng. Tuân theo kim tự tháp kiểm thử: kiểm thử đơn vị (logic biệt lập), kiểm thử tích hợp (nghi thức WebAuthn trên trình giả lập) và kiểm thử hệ thống (đầu cuối trên thiết bị vật lý).
Các hạng mục kiểm thử thiết yếu:
Để có hướng dẫn kiểm thử toàn diện bao gồm các chiến lược tự động hóa, các lỗi cụ thể của nền tảng và danh sách kiểm tra đầy đủ trước khi triển khai, hãy xem hướng dẫn chuyên dụng của chúng tôi: Kiểm thử luồng Passkey trong ứng dụng gốc iOS & Android.
Cân nhắc nhắc người dùng tạo passkey sau khi đăng nhập truyền thống thành công (mật khẩu, OAuth). Phương pháp chuyển đổi dần dần này:
Ví dụ: Sau khi đăng nhập OAuth qua System WebView, hiển thị một lời nhắc native: "Bật đăng nhập nhanh hơn với Face ID?" Nếu được chấp nhận, tạo passkey thông qua trang web được tải trong System WebView.
Quyết định cách triển khai passkey - qua Triển khai Native, System WebView hay Embedded WebView là một lựa chọn thiết kế quan trọng ảnh hưởng đến bảo mật, trải nghiệm người dùng và độ phức tạp của việc phát triển. Không có câu trả lời nào phù hợp cho tất cả.
Đối với các ứng dụng dựa trên OAuth: System WebView (ASWebAuthenticationSession, Chrome Custom Tabs) là điểm khởi đầu được khuyến nghị. Nó cung cấp hỗ trợ OAuth xuất sắc, nỗ lực triển khai tối thiểu và chia sẻ thông tin xác thực tự động.
Đối với các ứng dụng ưu tiên native: Hãy chuyển sang native càng sớm càng tốt. Đăng
nhập bằng passkey native mang lại UX liền mạch nhất với các khả năng độc quyền như
preferImmediatelyAvailableCredentials, cho phép hiển thị lớp phủ passkey tự động khi
khởi động ứng dụng—điều mà các triển khai WebView không thể cung cấp. Với việc iOS và
Android hiện cung cấp hỗ trợ hàng đầu cho passkey, các thành công trong thế giới thực cho
thấy tỷ lệ chấp nhận cao. Các công cụ (bao gồm các SDK mã nguồn mở và thư viện nền tảng)
đã trưởng thành để giúp việc tích hợp native trở nên khả thi trong các khung thời gian hợp
lý. Mặc dù bạn phải lưu ý đến các chính sách quản lý thiết bị, đồng bộ hóa chéo thiết bị
và các nhà cung cấp bên thứ ba, những thách thức này có thể được quản lý bằng kỹ thuật và
kiểm thử cẩn thận. Kết quả là một đăng nhập ứng dụng làm hài lòng người dùng với sự dễ
dàng và tốc độ của nó trong khi cải thiện đáng kể bảo mật.
Đối với các yêu cầu về khung Embedded WebView: Embedded WebView thường được sử dụng trong hai kịch bản thực tế. Đầu tiên, các ứng dụng dựa trên OAuth thường sử dụng System WebView cho luồng đăng nhập ban đầu, sau đó chuyển sang Embedded WebView để hiển thị các tùy chọn quản lý passkey trong màn hình cài đặt nơi cần kiểm soát phiên—mặc dù một số ứng dụng đơn giản hóa điều này bằng cách giữ System WebView cho cả hai luồng. Thứ hai, các ứng dụng đã nhúng luồng xác thực của họ vào khung WebView trước khi áp dụng passkey tiếp tục mô hình này để đảm bảo tính nhất quán. Embedded WebView với hỗ trợ WebAuthn native (AndroidX WebKit 1.12.1+) yêu cầu cấu hình và thiết lập (quyền, entitlements, cài đặt WebView) nhưng không còn cần mã cầu nối JavaScript tùy chỉnh. Lưu ý rằng Conditional UI không được hỗ trợ trong Embedded WebView. Chọn phương pháp này khi duy trì các mẫu xác thực nhúng hiện có hoặc khi bạn cần kiểm soát phiên/cookie cho các màn hình sau xác thực.
Cuối cùng, passkey trong các ứng dụng gốc đại diện cho một bước nhảy vọt lớn về cả sự tiện lợi cho người dùng và bảo mật. Dù được triển khai qua Native, System WebView hay Embedded WebView, chúng đều loại bỏ rủi ro lừa đảo (phishing) và gánh nặng quản lý mật khẩu cho người dùng của bạn. Các triển khai trong thế giới thực như tích hợp passkey trong ứng dụng gốc của VicRoads chứng minh rằng các phương pháp ưu tiên native mang lại tỷ lệ chấp nhận và sự hài lòng của người dùng cao nhất khi được thực hiện đúng cách với các tính năng như lớp phủ passkey tự động. Bằng cách tuân theo các thực tiễn tốt nhất để xác thực thân thiện với người dùng và chọn phương pháp triển khai phù hợp với kiến trúc ứng dụng của bạn—native-first cho ứng dụng mới, System WebView cho các luồng OAuth, hoặc Embedded WebView cho các mẫu nhúng hiện có—bạn có thể cung cấp đăng nhập không mật khẩu, sinh trắc học thực sự hiện thực hóa tầm nhìn của passkey: xác thực đơn giản, an toàn và thú vị cho mọi người.
Nếu passkey không hoạt động trong ứng dụng gốc của bạn, hãy kiểm tra các vấn đề phổ biến này theo phương pháp triển khai:
application/json.well-knownhttps://your-domain.com (không phải app://)webcredentials:yourdomain.comASWebAuthenticationSession (khuyến nghị) hoặc
SFSafariViewController?mode=developer trong quá trình phát triển (xóa đối với sản
phẩm)WebViewFeature.WEB_AUTHENTICATIONsetWebAuthenticationSupport() được gọi với
WEB_AUTHENTICATION_SUPPORT_FOR_APP"NotAllowedError: The request is not allowed by the user agent or the platform in the current context"
setWebAuthenticationSupport()Không có lời nhắc passkey xuất hiện
?mode=developer trên iOS để kiểm thử, xác minh
loại WebViewĐể gỡ lỗi chi tiết, hãy xem bài viết của chúng tôi về Relying Party ID trong các ứng dụng gốc.
SDK Native của Corbado:
Tài liệu nền tảng:
Công cụ xác thực:
Related Articles
Table of Contents