Studi Kasus

Zoho Mencapai Login 6x Lebih Cepat dengan Integrasi Kunci Sandi dan Pengelola Kredensial

Waktu baca: 10 menit

Sebagai developer Android, Anda terus mencari cara untuk meningkatkan keamanan, memperbaiki pengalaman pengguna, dan menyederhanakan pengembangan. Zoho, rangkaian software berbasis cloud yang komprehensif dan berfokus pada keamanan serta pengalaman yang lancar, berhasil mencapai peningkatan yang signifikan dengan mengadopsi kunci sandi di aplikasi Android OneAuth mereka.

Sejak mengintegrasikan kunci sandi pada tahun 2024, Zoho mencapai kecepatan login hingga 6 kali lebih cepat dibandingkan metode sebelumnya dan pertumbuhan penggunaan kunci sandi sebesar 31% dari bulan ke bulan (MoM).

Studi kasus ini membahas penggunaan kunci sandi dan Credential Manager API Android oleh Zoho untuk mengatasi kesulitan autentikasi. Dokumen 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 lainnya, bertujuan untuk meningkatkan keamanan autentikasi dan pengalaman pengguna sekaligus mengurangi beban operasional. Tantangan utama yang mendorong adopsi kunci sandi meliputi:

  • Kerentanan keamanan: Metode berbasis sandi tradisional membuat pengguna rentan terhadap serangan phishing dan pembobolan sandi.
  • Hambatan pengguna: Lupa sandi menyebabkan frustrasi dan meningkatkan 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 yang tahan terhadap phishing, kredensial yang disinkronkan di 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 menerapkan kunci sandi menggunakan Pengelola Kredensial, Zoho memangkas waktu login hingga 6 kali lipat, mengurangi biaya dukungan terkait sandi, dan memperoleh adopsi pengguna yang kuatmenggandakan login kunci sandi dalam 4 bulan dengan pertumbuhan MoM sebesar 31% . Pengguna Zoho kini dapat menikmati login yang lebih cepat dan mudah serta keamanan yang tahan terhadap phishing.

ANDDM_Zoho_Quote_fabrice.png

Penerapan dengan Credential Manager di Android

Jadi, bagaimana Zoho mencapai hasil ini? Mereka menggunakan Credential Manager API Android, library Jetpack yang direkomendasikan untuk mengimplementasikan autentikasi di Android.

Pengelola Kredensial menyediakan API terpadu yang menyederhanakan penanganan berbagai metode autentikasi. Daripada menggunakan berbagai API 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 perincian mendetail tentang proses pembuatan kunci sandi, login, dan penerapan sisi server.

Pembuatan kunci sandi

passkey.png

Untuk membuat kunci sandi, aplikasi terlebih dahulu 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. Kemudian, aplikasi 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 ditangkap dan ditangani oleh aplikasi.

Login

Aplikasi Zoho Android memulai proses login dengan 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, API ini memanggil Android CredentialManager.getCredential() API dengan permintaan ini. Tindakan ini 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 bertanda tangan (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.

Implementasi sisi server

Transisi Zoho untuk mendukung kunci sandi diuntungkan dari 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 paling signifikan yang dihadapi adalah menyesuaikan sistem penyimpanan kredensial. Metode autentikasi Zoho yang sudah ada, yang terutama menggunakan sandi dan kunci keamanan FIDO untuk autentikasi multi-faktor, memerlukan pendekatan penyimpanan yang berbeda dengan 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 diperbarui 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 origin 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 secara manual. Zoho melacak frekuensi error ini untuk menilai potensi peningkatan UX. Berdasarkan rekomendasi UX Android, Zoho mengambil langkah-langkah untuk lebih mengedukasi penggunanya tentang kunci sandi, memastikan pengguna mengetahui ketersediaan kunci sandi, dan mempromosikan penggunaan kunci sandi selama upaya login berikutnya.

Contoh kode ini menunjukkan pendekatan Zoho dalam 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 dalam lingkungan intranet tertutup. Proses verifikasi Pengelola Sandi Google untuk kunci sandi memerlukan akses domain publik untuk memvalidasi domain pihak tepercaya (RP). Namun, lingkungan pengujian internal Zoho tidak memiliki akses Internet publik ini, sehingga menyebabkan proses verifikasi gagal dan menghambat keberhasilan pengujian autentikasi kunci sandi. 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 tepercaya dengan aplikasi Android tertentu 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 menjaga 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 dengan benar yang sesuai dengan struktur JSON FIDO2 yang diperlukan.

Update server ini melibatkan beberapa penyesuaian teknis tertentu:

1. Konversi encoding: Server mengonversi encoding URL Base64 (biasanya digunakan di WebAuthn untuk kolom seperti ID kredensial) ke encoding Base64 standar sebelum menyimpan data yang relevan. Cuplikan di bawah 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 transportasi: Untuk memastikan pemrosesan data yang konsisten, logika server menangani daftar mekanisme transportasi (seperti USB, NFC, dan Bluetooth, yang menentukan cara komunikasi autentikator) sebagai array JSON.

3. Penyelarasan 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 menggambarkan bagian dari logika konversi yang diterapkan pada data klien sebelum diproses oleh server:

  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 utama dari strategi kunci sandi Zoho adalah mendorong adopsi pengguna sekaligus memberikan fleksibilitas untuk menyesuaikan dengan berbagai persyaratan organisasi. Hal ini dicapai melalui desain UI yang cermat dan kontrol kebijakan.

Zoho menyadari bahwa organisasi memiliki kebutuhan keamanan yang berbeda-beda. Untuk mengakomodasi hal ini, Zoho menerapkan:

  • Penerapan oleh admin: Melalui panel admin Zoho Directory, administrator dapat menetapkan kunci sandi sebagai metode autentikasi default yang wajib digunakan untuk seluruh organisasi mereka. Jika kebijakan ini diaktifkan, karyawan diwajibkan untuk menyiapkan kunci sandi saat login berikutnya dan menggunakannya pada masa mendatang.
  • Pilihan pengguna: Jika organisasi tidak menerapkan kebijakan tertentu, pengguna perorangan tetap memiliki kontrol. Mereka dapat memilih metode autentikasi pilihan mereka saat login, dengan memilih dari kunci sandi atau opsi lain yang dikonfigurasi melalui setelan autentikasi mereka.

Untuk membuat kunci sandi menarik dan mudah diterapkan oleh 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 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 itu diwajibkan oleh admin atau dipilih oleh pengguna. Anda dapat mempelajari lebih lanjut cara membuat alur pengguna yang lancar untuk autentikasi kunci sandi dengan mempelajari panduan pengalaman pengguna kunci sandi kami 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. Hal ini 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 kesalahan penerapan. Hal ini secara kolektif menyederhanakan proses login dan meningkatkan keandalan secara keseluruhan.

Dengan menerapkan kunci sandi menggunakan Credential Manager, Zoho mencapai peningkatan yang signifikan dan terukur di seluruh aspek:

  • Peningkatan kecepatan yang signifikan
    • 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 autentikasi nama pengguna, sandi, dan OTP SMS atau authenticator.
  • Biaya dukungan yang lebih rendah
    • Mengurangi permintaan dukungan terkait sandi, terutama untuk sandi yang terlupa.
    • Biaya lebih rendah yang terkait dengan 2FA berbasis SMS, karena pengguna lama dapat langsung mengaktifkan kunci sandi.
  • Adopsi pengguna yang kuat & keamanan yang ditingkatkan:
    • Login dengan kunci sandi meningkat dua kali lipat hanya dalam 4 bulan, yang menunjukkan penerimaan pengguna yang tinggi.
    • Pengguna yang beralih ke kunci sandi akan terlindungi sepenuhnya dari ancaman phishing umum dan pembobolan sandi.
    • Dengan pertumbuhan adopsi sebesar 31% MoM, makin banyak pengguna yang setiap hari merasakan manfaat dari peningkatan keamanan terhadap kerentanan seperti phishing dan penggantian SIM.

Rekomendasi dan praktik terbaik

Agar berhasil menerapkan kunci sandi di Android, developer harus mempertimbangkan praktik terbaik berikut:

  • Manfaatkan 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.
  • Pastikan 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:
    • Terapkan penanganan error yang andal untuk pengalaman pengguna yang lancar.
    • Berikan pesan error yang dilokalkan dan gunakan log mendetail untuk men-debug dan menyelesaikan kegagalan yang tidak terduga.
  • Memberi tahu pengguna tentang opsi pemulihan kunci sandi:
    • Mencegah skenario penguncian dengan memandu pengguna secara proaktif tentang opsi pemulihan.
  • Pantau metrik adopsi dan masukan pengguna:
    • Lacak engagement pengguna, rasio adopsi kunci sandi, dan rasio keberhasilan login untuk terus mengoptimalkan pengalaman pengguna.
    • Lakukan pengujian A/B pada berbagai alur autentikasi untuk meningkatkan konversi dan retensi.

Kunci sandi, jika digabungkan dengan Android Credential Manager API, menawarkan solusi autentikasi terpadu yang canggih 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 mereka.

Mulai menggunakan kunci sandi dan Pengelola Kredensial

Dapatkan pengalaman langsung menggunakan kunci sandi dan Credential Manager di Android menggunakan kode contoh publik kami.

Jika ada pertanyaan atau masalah, Anda dapat menyampaikannya kepada kami melalui pelacak masalah Kredensial Android.

Ditulis oleh:

Lanjutkan membaca