Token Bertanda Tangan Antara Dua PWA: HMAC-SHA256 Tanpa Backend
Anda perlu meneruskan identitas pengguna dari satu PWA ke PWA lainnya. Kedua aplikasi berjalan pada proyek Firebase yang terpisah. Keduanya tidak berbagi database. Keduanya tidak berbagi autentikasi.
Anda dapat menyelesaikan ini tanpa menulis kode backend. Anda hanya memerlukan Web Crypto API browser dan signed URL.
Masalahnya: Sebuah alat internal bernama PanelControl perlu membuka situs lain bernama Orders. Saat pengguna mengklik sebuah tombol, situs Orders harus mengetahui siapa pengguna tersebut. Pengguna tidak boleh melakukan login untuk kedua kalinya.
Tiga cara untuk melakukannya:
- Shared Firebase: Memerlukan database bersama. Tidak memungkinkan dalam kasus ini.
- postMessage: Memerlukan domain yang sama atau popup. Lebih sulit dikelola.
- HMAC signed URL: Gunakan tautan dengan token. Ini bekerja dengan sempurna.
Cara kerjanya: HMAC membuat tanda tangan menggunakan secret key. Penerima menggunakan kunci yang sama untuk memeriksa tanda tangan tersebut. Jika cocok, pengirim dapat dipercaya.
Alur kerjanya:
- Sisi pengirim:
- Buat payload dengan nama pengguna dan timestamp.
- Tandatangani payload menggunakan HMAC-SHA256.
- Tambahkan tanda tangan dan payload ke dalam URL.
- Sisi penerima:
- Baca token dari URL.
- Pisahkan tanda tangan dari payload.
- Hitung ulang tanda tangan menggunakan shared secret.
- Periksa apakah token sudah kedaluwarsa (misalnya, setelah 5 menit).
- Jika valid, tetapkan identitas pengguna di dalam aplikasi.
Detail implementasi: Web Crypto API bersifat bawaan (native) di semua browser modern. API ini bekerja dengan ArrayBuffer dan tidak memerlukan pustaka tambahan.
Agar tetap rapi, skrip penerima dijalankan di bagian head dokumen. Skrip tersebut memverifikasi token, memeriksa waktu, dan segera membersihkan URL menggunakan history.replaceState. Ini menghapus token dari bilah alamat browser agar tetap tersembunyi.
Catatan tentang keamanan: Secret key tersimpan di dalam kode klien. Siapa pun yang menggunakan DevTools dapat melihatnya. Hal ini tidak masalah untuk alat bisnis internal di mana Anda hanya meneruskan data yang tidak sensitif seperti nama.
Jika Anda membangun aplikasi publik dengan data sensitif, gunakan token sisi server sebagai gantinya. Untuk alat internal, metode khusus klien ini cepat dan efektif.
Tanpa infrastruktur tambahan. Tanpa database tambahan. Hanya menggunakan alat bawaan browser.
Sumber: https://dev.to/androve2k/signed-token-between-two-pwas-hmac-sha256-with-no-backend-3jod
