快速入門
身份驗證快速入門。
由 sandbox 金鑰到第一個已簽署 webhook,依次進行。每一步都有可運作嘅範例 — 複製後換上你自己嘅金鑰同 URL,就可以執行。
逐步說明
七個步驟,一個下午。
取得 sandbox 金鑰
Sandbox 金鑰(前綴 vk_sand_)而家按要求發出,自助註冊功能仍在開發中。請透過聯絡表格申請 — 大部分申請都會喺同一個工作日內處理。Sandbox session 永不收費,所以無需等待,可以即刻開始。
建立你嘅第一個 session
只需一次呼叫。傳入 return_url(申請人完成後會去到嘅頁面)同 webhook_url(簽署咗嘅結果會送去嘅地方)。你會取回 session_id 同 verification_url。
bashcurl -X POST https://api.shieldid.ca/v1/sessions \ -H "X-Api-Key: vk_sand_your_key" \ -H "Content-Type: application/json" \ -d '{ "return_url": "https://yourapp.example/verified", "webhook_url": "https://yourapp.example/hooks/shieldid", "expected_name": "Jordan Smith", "locale": "en", "metadata": { "application_id": "app_9182" } }'將連結交畀申請人
開啟 verification_url 就會見到託管頁面。喺桌面瀏覽器會顯示 QR code——掃描後會將同一條連結傳送到手機,實際嘅證件拍攝、活體檢測挑戰同自拍都係喺手機上進行。即刻用你自己部手機試下。
架設 webhook 端點
將 webhook_url 指向一個接受 POST、讀取原始請求內容(你需要未經解析嘅內容先可以驗證簽署),並且回傳 2xx 狀態碼嘅路由。如果唔係,ShieldID 最多會重試傳送三次。
javascriptimport express from "express"; const app = express(); app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { // Verify the signature before you trust this body — see the next step. console.log("Received a webhook:", req.body.toString()); res.status(200).send("ok"); }); app.listen(3000);驗證簽署
喺確認 webhook 內容確實來自 ShieldID 之前,唔好根據佢採取任何行動。用你嘅 webhook 密鑰對原始內容計算 HMAC-SHA256,再同 X-Bio-Signature 標頭比對。
javascriptimport crypto from "node:crypto"; function isValidShieldIdSignature(rawBody, signatureHeader, secret) { const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex"); const provided = signatureHeader || ""; const a = Buffer.from(expected, "hex"); const b = Buffer.from(provided, "hex"); return a.length === b.length && crypto.timingSafeEqual(a, b); } // rawBody must be the exact, unparsed request body app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { const ok = isValidShieldIdSignature(req.body, req.headers["x-bio-signature"], process.env.SHIELDID_WEBHOOK_SECRET); if (!ok) return res.status(401).send("invalid signature"); const result = JSON.parse(req.body); // result.session_id, result.status, result.checks, … res.status(200).send("ok"); });讀取結果
webhook payload 已經包含你需要嘅一切。如果你想自己攞結果——例如喺重新導向之後——可以直接呼叫結果端點。
bashcurl https://api.shieldid.ca/v1/sessions/ses_9f2c1a/result \ -H "X-Api-Key: vk_sand_your_key" # → { "session_id": "ses_9f2c1a", "status": "VERIFIED", "checks": { "document": "PASS", … }, … }處理 FAILED 同重試
去到 FAILED 嘅 session 會帶有 failure_reason。向申請人顯示有用嘅資訊。即將推出:重試 FAILED session,將佢重設為 PENDING。目前請將 FAILED 視為最終狀態,如果申請人想再試,就建立新 session。
正式啟用前
轉用正式環境。
請求格式喺 sandbox 同正式環境之間完全一樣——只有金鑰唔同。喺你讓真實申請人使用 vk_live_ session 之前,請先確認以下事項。
- 將 vk_sand_ 換成 vk_live_ 金鑰。請求嘅其他部分完全唔使改。
- 將 webhook_url 指向一個真正、長期運行並會驗證簽署嘅端點——而唔係 request-bin 或者手提電腦。
- 喺你嘅應用程式處理全部三個最終狀態:VERIFIED、FAILED 同 EXPIRED,唔好只顧理想情況。
- 確認你嘅 return_url 會讀取 ShieldID 喺重新導向時附加嘅 session_id 同 status 查詢參數。
- 用 GET /v1/pricing/{country} 或者價格頁面查閱最新定價,免得正式環境嘅收費令你意外。
- 唔好將 sandbox 金鑰放喺真實申請人可以接觸到嘅任何地方——sandbox session 免費,係因為佢並唔真實。
問題