Section 16/162 menit
16. Ringkasan & Decision Guide
16. Ringkasan & Decision Guide
| Skenario | Rekomendasi |
|---|---|
| Konfigurasi awal — passkey tidak bekerja | Verifikasi AASA file dan RP ID match, cek Xcode entitlements |
| Registrasi dengan keamanan enterprise | attestationPreference = .direct + server-side attestation verification |
| Login tanpa mengganggu UX | performAutoFillAssistedRequests() di viewDidLoad |
| User punya multiple device | iCloud Keychain sync otomatis — tidak perlu tambahan konfigurasi |
| User login di perangkat baru | Cross-device auth tersedia otomatis di system sheet |
| App keuangan/kesehatan | userVerificationPreference = .required wajib |
| User cancel — respons yang tepat | Error code .canceled — jangan tampilkan error, resume conditional |
| Tidak ada passkey di device | Error .notHandled — fallback ke password/OTP |
| Multiple domain untuk satu app | Satu AASA per domain, RP ID berbeda per domain |
| Testing tanpa device fisik | Simulator Xcode 15+ mendukung passkey penuh |
| Migrasi dari password | 4 fase: Offer → Promote → Prefer → Optional |
Checklist Production
swift
□ AASA file tersedia di https://[domain]/.well-known/apple-app-site-association
□ AASA Content-Type: application/json, tanpa redirect
□ Xcode entitlements: webcredentials:[domain] untuk semua environment
□ RP ID sama persis antara app, server, dan AASA
□ Server verifikasi challenge, origin, RP ID hash, dan signature
□ Sign count disimpan dan diverifikasi di server (anti-cloning)
□ Error .canceled tidak tampilkan error ke user
□ Error .notHandled memiliki fallback (password/OTP)
□ `authController` di-retain selama request berlangsung
□ `performAutoFillAssistedRequests()` dipanggil sebelum keyboard muncul
□ Testing di simulator (Xcode 15+) dan device fisik
□ Analytics untuk track adoption rate dan error patterns
□ Fallback ke password/OTP tersedia dan teruji
Passkeys bukan sekadar mengganti password — ini adalah pergeseran fundamental ke model autentikasi yang lebih kuat, lebih mudah digunakan, dan tidak bisa di-phish. Investasi dalam implementasi yang benar di awal akan terbayar dengan user retention yang lebih tinggi dan insiden keamanan yang lebih rendah.