Dokumentasi API

Mulai Cepat

Dari preauth sampai hasil persetujuan dalam beberapa baris kode.

Halaman Dokumentasi

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

  1. POST /auth/v2/preauth dengan username berisi email WiraPass pengguna. Lanjutkan hanya bila result bernilai auth.
  2. POST /auth/v2/auth dengan factor=push, device=auto, async=1. Jawabannya berupa txid.
  3. GET /auth/v2/auth_status?txid=… berulang kali selama result bernilai waiting. Setiap panggilan menunggu sampai 8 detik, jadi tidak perlu jeda di antaranya.
  4. allow: izinkan masuk. deny: tolak. Bila status bernilai fraud, pengguna menekan Bukan saya: beri tahu admin Anda.

Python dengan Pustaka Resmi Duo

Pustaka duo_client bekerja apa adanya: pip install duo_client.

Python (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.

Node.js (with duo.mjs from the Signing page)
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:

Python (duo_client)
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.

Duo adalah merek dagang Cisco. WiraPass tidak berafiliasi dengan Duo maupun Cisco dan hanya menawarkan kompatibilitas API.