Zoho Mencapai Login 6x Lebih Cepat dengan Integrasi Kunci Sandi dan Pengelola Kredensial
10 menit membaca
Sebagai developer Android, Anda terus mencari cara untuk meningkatkan keamanan, meningkatkan pengalaman pengguna, dan menyederhanakan pengembangan. Zoho, rangkaian software berbasis cloud yang komprehensif dan berfokus pada keamanan serta pengalaman yang lancar, mencapai peningkatan signifikan dengan mengadopsi kunci sandi di aplikasi Android OneAuth.
Sejak mengintegrasikan kunci sandi pada tahun 2024, Zoho mencapai kecepatan login hingga 6x lebih cepat daripada metode sebelumnya dan pertumbuhan 31% dari bulan ke bulan (MoM) dalam adopsi kunci sandi.
Studi kasus ini membahas adopsi kunci sandi dan Credential Manager API Android oleh Zoho untuk mengatasi kesulitan autentikasi. Studi kasus ini menjelaskan proses penerapan teknis dan menyoroti hasil yang berdampak.
Mengatasi tantangan autentikasi
Zoho menggunakan kombinasi metode autentikasi untuk melindungi akun pengguna. Hal ini mencakup Zoho OneAuth, solusi autentikasi multi-faktor (MFA) mereka sendiri, yang mendukung autentikasi berbasis sandi dan tanpa sandi menggunakan notifikasi push, kode QR, dan sandi sekali pakai berbasis waktu (TOTP). Zoho juga mendukung login gabungan, yang memungkinkan autentikasi melalui Security Assertion Markup Language (SAML) dan penyedia identitas pihak ketiga lainnya.
Tantangan
Zoho, seperti banyak organisasi, bertujuan untuk meningkatkan keamanan autentikasi dan pengalaman pengguna sekaligus mengurangi beban operasional. Tantangan utama yang menyebabkan adopsi kunci sandi meliputi:
- Kerentanan keamanan: Metode berbasis sandi tradisional membuat pengguna rentan terhadap serangan phishing dan pelanggaran sandi.
- Hambatan pengguna: Kelelahan sandi menyebabkan sandi terlupa, frustrasi, dan peningkatan ketergantungan pada proses pemulihan yang rumit.
- Inefisiensi operasional: Penanganan reset sandi dan masalah MFA menghasilkan overhead dukungan yang signifikan.
- Masalah skalabilitas: Basis pengguna yang terus bertambah memerlukan solusi autentikasi yang lebih aman dan efisien.
Mengapa beralih ke kunci sandi?
Kunci sandi diterapkan di aplikasi Zoho untuk mengatasi tantangan autentikasi dengan menawarkan pendekatan tanpa sandi yang secara signifikan meningkatkan keamanan dan pengalaman pengguna. Solusi ini memanfaatkan autentikasi anti-phishing, kredensial yang disinkronkan cloud untuk akses lintas perangkat yang mudah, dan biometrik (seperti sidik jari atau pengenalan wajah), PIN, atau pola untuk login yang aman, sehingga mengurangi kerentanan dan ketidaknyamanan yang terkait dengan sandi tradisional.
Dengan mengadopsi kunci sandi dengan Pengelola Kredensial, Zoho memangkas waktu login hingga 6x, mengurangi biaya dukungan terkait sandi, dan melihat adopsi pengguna yang kuat – menggandakan login kunci sandi dalam 4 bulan dengan pertumbuhan MoM 31% . Pengguna Zoho kini menikmati login yang lebih cepat dan mudah serta keamanan anti-phishing.
Penerapan dengan Credential Manager di Android
Jadi, bagaimana Zoho mencapai hasil ini? Mereka menggunakan Credential Manager API Android, library Jetpack yang direkomendasikan untuk menerapkan autentikasi di Android.
Pengelola Kredensial menyediakan API terpadu yang menyederhanakan penanganan berbagai metode autentikasi. Daripada menggunakan API yang berbeda untuk sandi, kunci sandi, dan login gabungan (seperti Login dengan Google), Anda menggunakan satu antarmuka.
Penerapan kunci sandi di Zoho memerlukan penyesuaian sisi klien dan sisi server. Berikut adalah perincian mendetail tentang proses pembuatan kunci sandi, login, dan penerapan sisi server.
Pembuatan kunci sandi
Untuk membuat kunci sandi, aplikasi pertama-tama mengambil detail konfigurasi dari server Zoho. Proses ini mencakup verifikasi unik, seperti sidik jari atau pengenalan wajah. Data verifikasi ini, yang diformat sebagai string requestJson), digunakan oleh aplikasi untuk membuat CreatePublicKeyCredentialRequest. Aplikasi kemudian memanggil metode credentialManager.createCredential, yang meminta pengguna untuk melakukan autentikasi menggunakan kunci layar perangkat mereka (biometrik, sidik jari, PIN, dll.).
Setelah konfirmasi pengguna berhasil, aplikasi akan menerima data kredensial kunci sandi baru, mengirimkannya kembali ke server Zoho untuk verifikasi, dan server kemudian menyimpan informasi kunci sandi yang ditautkan ke akun pengguna. Kegagalan atau pembatalan pengguna selama proses akan terdeteksi dan ditangani oleh aplikasi.
Login
Aplikasi Android Zoho memulai proses login kunci sandi dengan meminta opsi login, termasuk challenge unik, dari server backend Zoho. Aplikasi kemudian menggunakan data ini untuk membuat GetCredentialRequest, yang menunjukkan bahwa aplikasi akan melakukan autentikasi dengan kunci sandi. Kemudian, aplikasi akan memanggil Android CredentialManager.getCredential() API dengan permintaan ini. Tindakan ini akan memicu antarmuka sistem Android standar, yang meminta pengguna untuk memilih akun Zoho mereka (jika ada beberapa kunci sandi) dan melakukan autentikasi menggunakan kunci layar yang dikonfigurasi di perangkat mereka (sidik jari, pemindaian wajah, atau PIN). Setelah autentikasi berhasil, Pengelola Kredensial akan menampilkan pernyataan yang ditandatangani (bukti login) ke aplikasi Zoho. Aplikasi meneruskan pernyataan ini ke server Zoho, yang memverifikasi tanda tangan terhadap kunci publik tersimpan pengguna dan memvalidasi tantangan, sehingga menyelesaikan proses login yang aman.
Penerapan sisi server
Transisi Zoho untuk mendukung kunci sandi diuntungkan oleh sistem backend mereka yang sudah mematuhi FIDO WebAuthn, yang menyederhanakan proses penerapan sisi server. Namun, modifikasi tertentu masih diperlukan untuk mengintegrasikan fungsi kunci sandi sepenuhnya.
Tantangan terbesarnya adalah menyesuaikan sistem penyimpanan kredensial. Metode autentikasi Zoho yang ada, yang terutama menggunakan sandi dan kunci keamanan FIDO untuk autentikasi multi-faktor, memerlukan pendekatan penyimpanan yang berbeda dari kunci sandi, yang didasarkan pada kunci publik kriptografis. Untuk mengatasi hal ini, Zoho menerapkan skema database baru yang dirancang khusus untuk menyimpan kunci publik kunci sandi dan data terkait secara aman sesuai dengan protokol WebAuthn. Sistem baru ini dibuat bersama mekanisme pencarian untuk memvalidasi dan mengambil kredensial berdasarkan informasi pengguna dan perangkat, sehingga memastikan kompatibilitas mundur dengan metode autentikasi yang lebih lama.
Penyesuaian sisi server lainnya melibatkan penerapan kemampuan untuk menangani permintaan dari perangkat Android. Permintaan kunci sandi yang berasal dari aplikasi Android menggunakan format asal unik (android:apk-key-hash:example) yang berbeda dari asal web standar yang menggunakan format berbasis URI (https://example.com/app). Logika server perlu diupdate untuk mengurai format ini dengan benar, mengekstrak hash sidik jari SHA-256 dari sertifikat penandatanganan aplikasi, dan memvalidasinya terhadap daftar yang telah didaftarkan sebelumnya. Langkah verifikasi ini memastikan bahwa permintaan autentikasi benar-benar berasal dari aplikasi Android Zoho dan melindungi dari serangan phishing.
Cuplikan kode ini menunjukkan cara server memeriksa format asal khusus Android dan memvalidasi hash sertifikat:
val origin: String = clientData.getString("origin")
if (origin.startsWith("android:apk-key-hash:")) {
val originSplit: List<String> = origin.split(":")
if (originSplit.size > 3) {
val androidOriginHashDecoded: ByteArray = Base64.getDecoder().decode(originSplit[3])
if (!androidOriginHashDecoded.contentEquals(oneAuthSha256FingerPrint)) {
throw IAMException(IAMErrorCode.WEBAUTH003)
}
} else {
// Optional: Handle the case where the origin string is malformed }
}Penanganan error
Zoho menerapkan mekanisme penanganan error yang andal untuk mengelola error yang dihadapi pengguna dan developer. Error umum, CreateCredentialCancellationException, muncul saat pengguna membatalkan penyiapan kunci sandi mereka secara manual. Zoho melacak frekuensi error ini untuk menilai potensi peningkatan UX. Berdasarkan rekomendasi UX Android, Zoho mengambil langkah-langkah untuk memberikan edukasi yang lebih baik kepada pengguna tentang kunci sandi, memastikan pengguna mengetahui ketersediaan kunci sandi, dan mempromosikan adopsi kunci sandi selama upaya login berikutnya.
Contoh kode ini menunjukkan pendekatan Zoho untuk menangani error pembuatan kunci sandi yang paling umum:
private fun handleFailure(e: CreateCredentialException) {
val msg = when (e) {
is CreateCredentialCancellationException -> {
Analytics.addAnalyticsEvent(eventProtocol: "PASSKEY_SETUP_CANCELLED", GROUP_NAME)
Analytics.addNonFatalException(e)
"The operation was canceled by the user."
}
is CreateCredentialInterruptedException -> {
Analytics.addAnalyticsEvent(eventProtocol: "PASSKEY_SETUP_INTERRUPTED", GROUP_NAME)
Analytics.addNonFatalException(e)
"Passkey setup was interrupted. Please try again."
}
is CreateCredentialProviderConfigurationException -> {
Analytics.addAnalyticsEvent(eventProtocol: "PASSKEY_PROVIDER_MISCONFIGURED", GROUP_NAME)
Analytics.addNonFatalException(e)
"Credential provider misconfigured. Contact support."
}
is CreateCredentialUnknownException -> {
Analytics.addAnalyticsEvent(eventProtocol: "PASSKEY_SETUP_UNKNOWN_ERROR", GROUP_NAME)
Analytics.addNonFatalException(e)
"An unknown error occurred during Passkey setup."
}
is CreatePublicKeyCredentialDomException -> {
Analytics.addAnalyticsEvent(eventProtocol: "PASSKEY_WEB_AUTHN_ERROR", GROUP_NAME)
Analytics.addNonFatalException(e)
"Passkey creation failed: ${e.domError}"
}
else -> {
Analytics.addAnalyticsEvent(eventProtocol: "PASSKEY_SETUP_FAILED", GROUP_NAME)
Analytics.addNonFatalException(e)
"An unexpected error occurred. Please try again."
}
}
}Menguji kunci sandi di lingkungan intranet
Zoho menghadapi tantangan awal dalam menguji kunci sandi di lingkungan intranet tertutup. Proses verifikasi Pengelola Sandi Google untuk kunci sandi memerlukan akses domain publik untuk memvalidasi domain pihak yang mengandalkan (RP). Namun, lingkungan pengujian internal Zoho tidak memiliki akses Internet publik ini, sehingga menyebabkan proses verifikasi gagal dan menghambat pengujian autentikasi kunci sandi yang berhasil. Untuk mengatasinya, Zoho membuat lingkungan pengujian yang dapat diakses secara publik, yang mencakup hosting server sementara dengan file link aset dan validasi domain.
Contoh dari file assetlinks.json yang digunakan di lingkungan pengujian publik Zoho ini menunjukkan cara mengaitkan domain pihak yang mengandalkan dengan aplikasi Android yang ditentukan untuk validasi kunci sandi.
[
{
"relation": [
"delegate_permission/common.handle_all_urls",
"delegate_permission/common.get_login_creds"
],
"target": {
"namespace": "android_app",
"package_name": "com.zoho.accounts.oneauth",
"sha256_cert_fingerprints": [
"SHA_HEX_VALUE"
]
}
}
]Melakukan integrasi dengan server FIDO yang ada
Sistem kunci sandi Android menggunakan standar FIDO2 WebAuthn modern. Standar ini memerlukan permintaan dalam format JSON tertentu, yang membantu mempertahankan konsistensi antara aplikasi native dan platform web. Untuk mengaktifkan dukungan kunci sandi Android, Zoho melakukan perubahan kompatibilitas dan struktural kecil untuk membuat dan memproses permintaan yang mematuhi struktur JSON FIDO2 yang diperlukan dengan benar.
Update server ini melibatkan beberapa penyesuaian teknis tertentu:
1. Konversi encoding: Server mengonversi encoding URL Base64 (yang umum digunakan di WebAuthn untuk kolom seperti ID kredensial) ke encoding Base64 standar sebelum menyimpan data yang relevan. Cuplikan di bawah ini menunjukkan cara rawId dapat dienkode ke Base64 standar:
// Convert rawId bytes to a standard Base64 encoded string for storage val base64RawId: String = Base64.getEncoder().encodeToString(rawId.toByteArray())
2. Format daftar transpor: Untuk memastikan pemrosesan data yang konsisten, logika server menangani daftar mekanisme transpor (seperti USB, NFC, dan Bluetooth, yang menentukan cara autentikator berkomunikasi) sebagai array JSON.
3. Penyesuaian data klien: Tim Zoho menyesuaikan cara server mengenkode dan mendekode kolom clientDataJson. Hal ini memastikan struktur data selaras dengan ekspektasi API internal Zoho yang ada. Contoh di bawah ini mengilustrasikan bagian dari logika konversi yang diterapkan ke data klien sebelum server memprosesnya:
private fun convertForServer(type: String): String {
val clientDataBytes = BaseEncoding.base64().decode(type)
val clientDataJson = JSONObject(String(clientDataBytes, StandardCharsets.UTF_8))
val clientJson = JSONObject()
val challengeFromJson = clientDataJson.getString("challenge")
// 'challenge' is a technical identifier/token, not localizable text.
clientJson.put("challenge", BaseEncoding.base64Url()
.encode(challengeFromJson.toByteArray(StandardCharsets.UTF_8)))
clientJson.put("origin", clientDataJson.getString("origin"))
clientJson.put("type", clientDataJson.getString("type"))
clientJson.put("androidPackageName", clientDataJson.getString("androidPackageName"))
return BaseEncoding.base64().encode(clientJson.toString().toByteArray())
}Panduan pengguna dan preferensi autentikasi
Bagian penting dari strategi kunci sandi Zoho adalah mendorong adopsi pengguna sekaligus memberikan fleksibilitas untuk menyesuaikan diri dengan berbagai persyaratan organisasi. Hal ini dicapai melalui desain UI dan kontrol kebijakan yang cermat.
Zoho menyadari bahwa organisasi memiliki kebutuhan keamanan yang berbeda-beda. Untuk mengakomodasi hal ini, Zoho menerapkan:
- Penerapan admin: Melalui panel admin Zoho Directory, administrator dapat menetapkan kunci sandi sebagai metode autentikasi default wajib untuk seluruh organisasi mereka. Jika kebijakan ini diaktifkan, karyawan diwajibkan untuk menyiapkan kunci sandi saat login berikutnya dan menggunakannya di masa mendatang.
- Pilihan pengguna: Jika organisasi tidak menerapkan kebijakan tertentu, pengguna individu akan tetap memiliki kontrol. Mereka dapat memilih metode autentikasi pilihan mereka selama login, memilih dari kunci sandi atau opsi lain yang dikonfigurasi melalui setelan autentikasi mereka.
Untuk membuat adopsi kunci sandi menarik dan mudah bagi pengguna akhir, Zoho menerapkan:
- Penyiapan yang mudah: Zoho mengintegrasikan penyiapan kunci sandi langsung ke aplikasi seluler Zoho OneAuth (tersedia untuk Android dan iOS). Pengguna dapat dengan mudah mengonfigurasi kunci sandi mereka dalam aplikasi kapan saja, sehingga mempermudah transisi.
- Akses yang konsisten: Dukungan kunci sandi diterapkan di seluruh titik kontak pengguna utama, sehingga memastikan pengguna dapat mendaftar dan melakukan autentikasi menggunakan kunci sandi melalui:
- Aplikasi seluler Zoho OneAuth (Android &iOS);
- Halaman akun web Zoho mereka.
Metode ini memastikan bahwa proses penyiapan dan penggunaan kunci sandi dapat diakses dan diintegrasikan ke dalam platform yang sudah mereka gunakan, terlepas dari apakah hal tersebut diwajibkan oleh admin atau dipilih oleh pengguna. Anda dapat mempelajari lebih lanjut cara membuat alur pengguna yang lancar untuk autentikasi kunci sandi dengan menjelajahi panduan pengalaman pengguna kunci sandi yang komprehensif.
Dampak pada kecepatan developer dan efisiensi integrasi
Pengelola Kredensial, sebagai API terpadu, juga membantu meningkatkan produktivitas developer dibandingkan dengan alur login yang lebih lama. Pengelola Kredensial mengurangi kompleksitas penanganan beberapa metode autentikasi dan API secara terpisah, sehingga menghasilkan integrasi yang lebih cepat, dari hitungan bulan menjadi hitungan minggu, dan lebih sedikit error penerapan. Hal ini secara kolektif menyederhanakan proses login dan meningkatkan keandalan secara keseluruhan.
Dengan menerapkan kunci sandi dengan Credential Manager, Zoho mencapai peningkatan signifikan dan terukur di seluruh aspek:
- Peningkatan kecepatan yang dramatis
- Login 2x lebih cepat dibandingkan dengan autentikasi sandi tradisional.
- Login 4x lebih cepat dibandingkan dengan nama pengguna atau nomor ponsel dengan autentikasi OTP email atau SMS.
- Login 6x lebih cepat dibandingkan dengan nama pengguna, sandi, dan autentikasi OTP SMS atau autentikator.
- Pengurangan biaya dukungan
- Pengurangan permintaan dukungan terkait sandi, terutama untuk sandi yang terlupa.
- Biaya yang lebih rendah terkait dengan 2FA berbasis SMS, karena pengguna yang ada dapat langsung melakukan orientasi dengan kunci sandi.
- Adopsi pengguna yang kuat &keamanan yang ditingkatkan:
- Login kunci sandi dua kali lipat hanya dalam 4 bulan, yang menunjukkan penerimaan pengguna yang tinggi.
- Pengguna yang bermigrasi ke kunci sandi terlindungi sepenuhnya dari ancaman phishing dan pelanggaran sandi yang umum.
- Dengan pertumbuhan adopsi MoM 31%, semakin banyak pengguna yang mendapatkan manfaat setiap hari dari peningkatan keamanan terhadap kerentanan seperti phishing dan pertukaran SIM.
Rekomendasi dan praktik terbaik
Untuk berhasil menerapkan kunci sandi di Android, developer harus mempertimbangkan praktik terbaik berikut:
- Memanfaatkan Credential Manager API Android:
- Pengelola Kredensial menyederhanakan pengambilan kredensial, mengurangi upaya developer, dan memastikan pengalaman autentikasi yang terpadu.
- Menangani sandi, kunci sandi, dan alur login gabungan dalam satu antarmuka.
- Memastikan konsistensi encoding data saat bermigrasi dari solusi autentikasi FIDO lainnya:
- Pastikan Anda menangani format yang konsisten untuk semua input/output saat bermigrasi dari solusi autentikasi FIDO lainnya seperti kunci keamanan FIDO.
- Mengoptimalkan penanganan error dan logging:
- Menerapkan penanganan error yang andal untuk pengalaman pengguna yang lancar.
- Menyediakan pesan error yang dilokalkan dan menggunakan log mendetail untuk men-debug dan mengatasi kegagalan yang tidak terduga.
- Memberikan edukasi kepada pengguna tentang opsi pemulihan kunci sandi:
- Mencegah skenario penguncian dengan memandu pengguna secara proaktif tentang opsi pemulihan.
- Memantau metrik adopsi dan masukan pengguna:
- Melacak engagement pengguna, rasio adopsi kunci sandi, dan rasio keberhasilan login untuk terus mengoptimalkan pengalaman pengguna.
- Melakukan pengujian A/B pada alur autentikasi yang berbeda untuk meningkatkan konversi dan retensi.
Kunci sandi, yang dikombinasikan dengan Android Credential Manager API, menawarkan solusi autentikasi yang canggih dan terpadu yang meningkatkan keamanan sekaligus menyederhanakan pengalaman pengguna. Kunci sandi secara signifikan mengurangi risiko phishing, pencurian kredensial, dan akses tidak sah. Sebaiknya developer mencoba pengalaman ini di aplikasi mereka dan menghadirkan autentikasi yang paling aman kepada pengguna.
Mulai menggunakan kunci sandi dan Pengelola Kredensial
Mulai menggunakan kunci sandi dan Pengelola Kredensial di Android menggunakan kode contoh publik kami.
Jika ada pertanyaan atau masalah, Anda dapat membagikannya kepada kami melalui pelacak masalah Kredensial Android.
-
Studi KasusUber memanfaatkan Android Restore Credentials API untuk menyederhanakan login perangkat baru, yang diproyeksikan akan mengurangi 4 juta login manual per tahun dan meningkatkan retensi pengguna.
Niharika Arora, Tracy Agyemang • 5 menit membaca -
Studi KasusMulai dari berita dan hiburan hingga olahraga dan politik, X adalah aplikasi media sosial yang bertujuan untuk membantu hampir 500 juta pengguna di seluruh dunia mendapatkan cerita lengkap dengan semua komentar live.
Niharika Arora, Tracy Agyemang • 3 menit membaca -
Studi KasusRegresi performa sangat sulit direproduksi, sehingga regresi menjadi hambatan besar bagi developer seluler.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • 4 menit membaca
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.