Sistem yang sekarang memakai Auth API v2 milik Duo cukup mengganti tiga nilai. Kode dan pustaka resmi Duo tetap sama.
Yang Perlu Diganti
| Nilai | Duo | WiraPass |
|---|---|---|
| Hostname API | api-xxxxxxxx.duosecurity.com | auth.wiracode.com |
| Integration key | dari Duo Admin Panel | dari operator WiraPass (caranya) |
| Secret key | dari Duo Admin Panel | dari operator WiraPass |
# Before (Duo)
auth = duo_client.Auth(ikey="DIXXXXXXXXXXXXXXXXXX", skey="duo-secret", host="api-xxxxxxxx.duosecurity.com")
# After (WiraPass): the same code, three new values
auth = duo_client.Auth(ikey="DIYYYYYYYYYYYYYYYYYY", skey="wirapass-secret", host="auth.wiracode.com")Nama Pengguna Adalah Email
WiraPass mengenal pengguna dari email yang ia pakai untuk masuk ke aplikasi WiraPass. Kirim email itu sebagai username. Bila username di sistem Anda bukan email, petakan dulu ke email pengguna. Nilai user_id adalah ID pengguna WiraPass (UUID), bukan ID dari Duo.
Yang Didukung
- Endpoint
/auth/v2/ping,/auth/v2/check,/auth/v2/logo,/auth/v2/enroll,/auth/v2/enroll_status,/auth/v2/preauth,/auth/v2/auth,/auth/v2/auth_status. - Factor
auto,push(persetujuan WiraPass), danpasscode(kode cadangan WiraPass), dengan atau tanpaasync. - Tanda tangan versi 5, 4, dan 2 (HMAC-SHA512 atau HMAC-SHA1), badan JSON atau form, dan header X-Duo-*.
- Format jawaban Duo, kode kesalahan Duo, dan nilai status
allow,deny,fraud,timeout,locked_out,pushed. type,display_username,pushinfo,ipaddr,hostnametampil di HP pengguna.
Yang Tidak Didukung
- SMS (
factor=sms) dan panggilan telepon (factor=phone): ditolak dengan40002dan pesan yang jelas. - Duo Universal Prompt dan alur web OIDC (
/oauth/v1/…), serta Web SDK v2 yang lama. - Bypass code dan hardware token. Parameter
bypass_codespada enroll diabaikan. - Verified Duo Push dan Remembered Devices:
client_supports_verified_pushdantrusted_device_tokenditerima tetapi diabaikan, dan preauth tidak pernah menjawaballow. - Admin API, Accounts API, dan tanda tangan versi 1.
Passcode Adalah Kode Cadangan WiraPass
Pengguna membuka aplikasi WiraPass, lalu Setelan, Persetujuan, Kode cadangan. Kodenya 6 digit, berganti setiap 30 detik, dan setiap kode hanya bisa dipakai sekali. Kirim kode itu sebagai passcode dengan factor=passcode.
mobile_otppada preauth hanya muncul bila pengguna sudah punya kode cadangan.- Paling banyak 5 pemeriksaan per 5 menit per pengguna, setelah itu 42901.
- Setelah 10 kode salah berturut-turut, kode terkunci dan jawabannya
status=locked_out. Pengguna membuat kode baru dari HP yang aktif.
Pendaftaran Pengguna
Tidak ada aktivasi Duo Mobile. Pengguna memasang WiraPass, masuk dengan email yang sama, lalu mengaktifkan persetujuan. Endpoint enroll memberi alamat halaman unduhan dan kode QR-nya, dan enroll_status menjawab success begitu email itu punya HP penyetuju yang aktif. Di WiraPass, username wajib diisi pada enroll. Kolom enroll_portal_url pada preauth juga menunjuk ke halaman unduhan.
Perbedaan Kecil Lainnya
- Push tampil di semua HP penyetuju pengguna yang sedang masuk ke WiraPass.
deviceboleh berisi auto atau id HP dari preauth. - Bila tidak ada HP yang sedang masuk, push dijawab
denytanpa mengirim apa pun, dan status_msg menyarankan kode cadangan. - Setelah Bukan saya, preauth menjawab
denydan push ditolak selama 15 menit untuk integrasi itu. status_msgberbahasa Indonesia, kecuali Anda mengirimAccept-Language: en.numberpada devices selalu kosong.txidberupa UUID, dan auth_status menunggu paling lama 8 detik per panggilan. Batas lainnya.
Sertifikat TLS dan CA Pinning
Pustaka resmi Duo secara bawaan hanya memercayai daftar root CA miliknya sendiri (CA pinning). Bila pustaka Anda menolak sertifikat WiraPass, misalnya dengan CERTIFICATE_VERIFY_FAILED, matikan pinning dengan opsi di bawah. Pemeriksaan sertifikat TLS biasa tetap berjalan dengan daftar CA sistem.
| Pustaka | Opsi |
|---|---|
| duo_client (Python) | duo_client.Auth(..., disable_ca_pinning=True) |
| @duosecurity/duo_api (Node.js) | new Client(ikey, skey, host, 5, false) |
| duo_api_php | $auth->disableCaPinning() |
| duo_api_golang | duoapi.NewDuoApi(ikey, skey, host, ua, duoapi.SetCAPinning(false)) |
| duo-client (Java) | new Http.HttpBuilder(...).disableCaPinning().build() |