Sebelum Mulai
- Integration key, secret key, dan hostname API dari operator (cara mendapatkannya).
- Satu akun WiraPass untuk uji coba: pasang WiraPass di HP, masuk dengan email Anda, lalu aktifkan persetujuan di tab Persetujuan.
- Jam server yang tepat (NTP). Tanda tangan ditolak bila jam Anda meleset lebih dari 5 menit.
Alurnya
POST /auth/v2/preauthdenganusernameberisi email WiraPass pengguna. Lanjutkan hanya bilaresultbernilaiauth.POST /auth/v2/authdenganfactor=push,device=auto,async=1. Jawabannya berupatxid.GET /auth/v2/auth_status?txid=…berulang kali selama result bernilai waiting. Setiap panggilan menunggu sampai 8 detik, jadi tidak perlu jeda di antaranya.allow: izinkan masuk.deny: tolak. Bila status bernilaifraud, pengguna menekan Bukan saya: beri tahu admin Anda.
Python dengan Pustaka Resmi Duo
Pustaka duo_client bekerja apa adanya: pip install duo_client.
import duo_client
auth = duo_client.Auth(
ikey="DIXXXXXXXXXXXXXXXXXX",
skey="your-secret-key-from-the-operator",
host="auth.wiracode.com",
)
USERNAME = "rina@example.com" # the user's WiraPass email
pre = auth.preauth(username=USERNAME, ipaddr="203.0.113.7")
if pre["result"] == "auth":
# Send an approval request to the user's phone; do not block.
txid = auth.auth(
factor="push",
username=USERNAME,
device="auto",
async_txn=True,
type="Sign in to the Staff Portal",
ipaddr="203.0.113.7",
)["txid"]
# auth_status long-polls: each call waits up to 8 seconds for a change.
status = auth.auth_status(txid)
while status["waiting"]:
status = auth.auth_status(txid)
if status["success"]:
print("allow: access granted")
else:
print("deny:", status["status"], status["status_msg"])
else:
# "enroll": the user has no approval phone yet; "deny": paused after "Not me".
print(pre["result"] + ":", pre["status_msg"])
Node.js Tanpa Pustaka
Contoh ini memakai duo.mjs dari halaman Menandatangani Permintaan.
import { duoCall } from './duo.mjs';
const username = 'rina@example.com'; // the user's WiraPass email
const pre = (await duoCall('POST', '/auth/v2/preauth', { username })).response;
if (pre.result === 'auth') {
const { txid } = (await duoCall('POST', '/auth/v2/auth', {
username, factor: 'push', device: 'auto', async: '1', type: 'Sign in to the Staff Portal',
})).response;
let status;
do {
// Long-poll: each call waits up to 8 seconds for a change.
status = (await duoCall('GET', '/auth/v2/auth_status', { txid })).response;
} while (status.result === 'waiting');
console.log(status.result === 'allow' ? 'allow: access granted' : `deny: ${status.status} ${status.status_msg}`);
} else {
console.log(`${pre.result}: ${pre.status_msg}`);
}
Bila HP Tidak Bisa Dihubungi
Bila tidak ada HP penyetuju yang sedang masuk ke WiraPass, preauth tetap menjawab auth, tetapi status_msg menyarankan kode cadangan, dan push langsung dijawab deny tanpa mengirim apa pun. Minta pengguna mengetik kode cadangan dari aplikasi WiraPass:
result = auth.auth(factor="passcode", username=USERNAME, passcode=code_typed_by_user)
if result["result"] == "allow":
print("allow: access granted")Menunggu Jawaban dalam Satu Panggilan
Tanpa async, panggilan auth menunggu sampai pengguna menjawab atau waktu habis (60 detik), lalu langsung memberi result dan status akhir. Pasang timeout HTTP klien Anda lebih dari 65 detik. Bila klien memutus sambungan lebih dulu, permintaan di HP dibatalkan.