Aktivasi OTP Tanpa Password
Cara SmallPict menggunakan One-Time Password (OTP) yang aman untuk aktivasi situs WordPress tanpa password.
SmallPict meniadakan sistem kredensial username/password tradisional dan menggantinya dengan mekanisme otentikasi One-Time Password (OTP).
Hal ini menjamin keamanan maksimal terhadap serangan credential stuffing sekaligus memudahkan pemilik web menghubungkan WordPress mereka hanya dalam hitungan detik.
Arsitektur Keamanan
Alur verifikasi OTP menggunakan hashing kriptografis, masa berlaku (TTL) ketat, dan pelacakan percobaan atomik:
| Parameter Keamanan | Aturan Penegakan |
|---|---|
| Pembuatan Kode | Integer 6 digit acak yang aman secara kriptografis |
| Keamanan Penyimpanan | Kode OTP di-hash menggunakan SHA-256 sebelum disimpan ke database (tidak pernah disimpan sebagai teks biasa) |
| Masa Berlaku (TTL) | Berlaku selama 5 menit (300 detik) sejak diterbitkan |
| Jeda Permintaan Ulang | Minimal jeda 60 detik sebelum dapat meminta kode baru |
| Batas Percobaan | Maksimal 3 kali percobaan salah sebelum sesi dibatalkan otomatis |
| Pelacakan IP | Alamat IP pemohon di-hash dan dipantau untuk perlindungan anti-bruteforce |
Alur Autentikasi
1. Meminta Kode OTP
Saat admin situs memasukkan alamat email di halaman pengaturan WordPress, plugin memanggil endpoint publik:
POST https://api.smallpict.app/v1/plugin/auth/request-otp
{ "email": "admin@example.com", "site_url": "https://example.com", "consent": true}SmallPict menghasilkan kode OTP, hanya menyimpan hash-nya, lalu mengirimkan kode tersebut ke alamat email yang Anda masukkan.
2. Memverifikasi Kode
Saat administrator memasukkan 6 digit kode OTP:
POST https://api.smallpict.app/v1/plugin/auth/verify-otp
{ "email": "admin@example.com", "otp": "839201", "site_url": "https://example.com"}Setelah verifikasi sukses, SmallPict secara otomatis:
- Mendaftarkan akun customer baru jika ini adalah situs pertama pengguna.
- Menghasilkan API key terisolasi khusus untuk situs tersebut.
- Menyimpan kredensial secara aman di database opsi WordPress (
wp_options).