WebOTP API kini dapat menerima OTP dari dalam iframe.
OTP ({i>password<i} sekali pakai) SMS biasanya digunakan untuk memverifikasi nomor telepon, sebagai langkah kedua dalam autentikasi, atau untuk memverifikasi pembayaran di web. Namun, beralih antara browser dan aplikasi SMS, untuk menyalin-tempel atau secara manual memasukkan OTP sehingga memudahkan untuk melakukan kesalahan dan menambah hambatan pada pengalaman pengguna.
WebOTP API memberi situs kemampuan untuk melakukan mendapatkan {i>password<i} sekali pakai dari pesan SMS dan masukkan secara otomatis dan mudah diakses oleh pengguna, hanya dengan sekali ketuk tanpa mengalihkan tombol . SMS diformat secara khusus dan terikat dengan asalnya, sehingga mengurangi situs web {i>phishing <i}juga bisa mencuri OTP.
Satu kasus penggunaan yang belum didukung di WebOTP adalah menargetkan origin di dalam iframe. Ini biasanya digunakan untuk konfirmasi pembayaran, terutama dengan 3D Secure. Memiliki kesamaan format untuk mendukung lintas origin iframe, WebOTP API kini menayangkan OTP yang terikat dengan origin bertingkat mulai Chrome 91.
Cara kerja WebOTP API
WebOTP API sendiri cukup sederhana:
…
const otp = await navigator.credentials.get({
otp: { transport:['sms'] }
});
…
Pesan SMS harus diformat dengan satu kali yang terikat dengan asal kode tersebut.
Your OTP is: 123456.
@web-otp.glitch.me #12345
Perhatikan bahwa pada baris terakhir berisi tempat asal yang akan didahului dengan
@
yang diikuti dengan OTP yang diawali dengan #
.
Saat pesan teks masuk, bilah info muncul dan meminta pengguna untuk
memverifikasi nomor telepon mereka. Setelah pengguna mengklik tombol Verify
,
browser secara otomatis meneruskan OTP ke situs dan mengatasi
navigator.credentials.get()
. Situs kemudian bisa mengekstrak OTP dan menyelesaikan
proses verifikasi.
Pelajari dasar-dasar penggunaan WebOTP di Memverifikasi nomor telepon di web dengan WebOTP API.
Kasus penggunaan iframe lintas origin
Memasukkan OTP dalam formulir dalam iframe lintas origin adalah hal yang umum dalam pembayaran yang signifikan. Beberapa penerbit kartu kredit mewajibkan langkah verifikasi tambahan untuk memeriksa keaslian pembayar. Ini disebut 3D Secure dan bentuknya biasanya diekspos dalam iframe di halaman yang sama seolah-olah merupakan bagian dari alur pembayaran.
Contoh:
- Pengguna mengunjungi
shop.example
untuk membeli sepasang sepatu dengan kartu kredit. - Setelah memasukkan nomor kartu kredit, penyedia jasa pembayaran terintegrasi akan menampilkan
formulir dari
bank.example
dalam iframe yang meminta pengguna memverifikasi nomor telepon Anda untuk checkout yang cepat. bank.example
mengirim SMS yang berisi OTP kepada pengguna sehingga dia dapat masukkan untuk memverifikasi identitas mereka.
Cara menggunakan WebOTP API dari iframe lintas origin
Untuk menggunakan WebOTP API dari dalam iframe lintas origin, Anda perlu melakukan dua hal hal:
- Beri anotasi pada asal frame bagian atas dan asal iframe di teks SMS untuk membuat pesan email baru.
- Konfigurasikan kebijakan izin untuk mengizinkan iframe lintas origin menerima OTP langsung dari pengguna.
Anda dapat mencoba sendiri demonya di https://web-otp-iframe-demo.stackblitz.io.
Menganotasi origin terikat ke pesan teks SMS
Ketika WebOTP API dipanggil dari dalam iframe, pesan teks SMS harus
menyertakan asal frame teratas yang diawali dengan @
diikuti dengan OTP yang diawali dengan #
diikuti dengan asal iframe yang diawali dengan @
.
@shop.example #123456 @bank.exmple
Mengonfigurasi Kebijakan Izin
Untuk menggunakan WebOTP dalam iframe lintas origin, sematan harus memberikan akses ke API melalui kebijakan izin otp-credential untuk menghindari hal yang tidak diinginkan perilaku model. Secara umum, ada dua cara untuk mencapai sasaran ini:
- melalui Header HTTP:
Permissions-Policy: otp-credentials=(self "https://bank.example")
- melalui atribut
allow
iframe:
<iframe src="https://bank.example/…" allow="otp-credentials"></iframe>
Lihat contoh lain tentang cara menentukan kebijakan izin .
Peringatan
Tingkatan bertingkat
Saat ini Chrome hanya mendukung panggilan WebOTP API dari iframe lintas origin yang tidak lebih dari satu origin unik dalam rantai ancestornya. Di kolom skenario berikut:
- a.com -> b.com
- a.com -> b.com -> b.com
- a.com -> a.com -> b.com
- a.com -> b.com -> c.com
menggunakan WebOTP di b.com didukung tetapi menggunakannya di c.com tidak.
Perhatikan bahwa skenario berikut juga tidak didukung karena kurangnya permintaan dan kompleksitas UX.
- a.com -> b.com -> a.com (memanggil WebOTP API)
Interoperabilitas
Meskipun mesin browser selain Chromium
tidak mengimplementasikan API WebOTP,
Safari memiliki format SMS yang sama
dengan dukungan input[autocomplete="one-time-code"]
. Di Safari, segera setelah
SMS yang berisi format kode sekali pakai yang terikat asal tiba dengan
keyboard akan menyarankan untuk
memasukkan OTP ke kolom {i>input<i}.
Mulai April 2021, Safari mendukung iframe dengan format SMS unik menggunakan
%
.
Namun, karena diskusi spesifikasi berakhir dengan @
, kami berharap
implementasi format SMS
yang didukung akan dikonvergensi.
Masukan
Masukan Anda sangat berharga untuk meningkatkan kualitas WebOTP API, jadi lanjutkan dan cobalah dan beri tahu kami apa yang Anda pikirkan.
Resource
- Verifikasi nomor telepon di web dengan OTP Web API
- Praktik terbaik formulir OTP SMS
- API WebOTP
- Kode sekali pakai yang terikat origin dikirim melalui SMS
Foto oleh rupixen.com di Unsplash