웹훅 및 연동
신원 확인 웹훅, 호스팅 페이지, 그리고 위젯.
신청자를 호스팅 검증 페이지로 보내거나 위젯을 자체 흐름에 넣고, 결과가 나오는 즉시 서명된 웹훅을 받으며, 링크를 가진 누구나 공개 자격 확인 페이지에서 이를 확인하게 하세요. 하루 오후면 출시할 수 있도록 만들어진 KYC API 연동입니다.
- HMAC-SHA256으로 서명된 콜백
- 데스크톱에서 휴대폰으로 QR 인계
- Sandbox 세션에는 요금이 청구되지 않습니다
호스팅 인증 페이지
링크 하나로 전체 흐름을 처리해요.
API로 세션을 생성하면 인증 URL을 받게 돼요. 이메일, 문자 또는 자체 앱으로 전달하면 나머지는 페이지가 처리해요.
데스크톱
신청자가 책상에서 링크를 엽니다.
QR 전환
페이지에 QR 코드와 짧은 안내 카드가 표시됩니다.
휴대폰 촬영
QR 코드를 스캔하면 같은 세션이 문서 및 셀카 촬영 단계로 전환됩니다.
확인 완료
세션은 휴대폰에서 그대로 VERIFIED 상태가 됩니다.
다시 고객님께로
어느 쪽이든 반환 URL로 리디렉션되고, 서명된 웹훅도 함께 전송됩니다.
결제 리디렉션처럼 작동해요
신청자는 세션 고유의 URL에 있는 페이지로 이동해요. 계정도, 설치할 앱도 필요 없어요.
QR 인계, 데스크톱에서 휴대폰으로
데스크톱에서 열면 카메라 접근을 요청하는 대신 QR 코드와 짧은 안내 카드가 표시돼요. QR 코드를 스캔하면 휴대폰에서 같은 링크가 열리고, 곧바로 문서 및 셀피 촬영으로 전환돼요.
결과와 함께 돌아와요
세션이 VERIFIED에 도달하면 페이지가 세션 ID와 상태를 덧붙여 반환 URL로 리디렉션하므로, 다른 것을 기다리지 않아도 앱에서 결과를 알 수 있어요.
브랜드 적용, 해당 요금제에서 제공
회사 이름, 로고, 강조 색상, 이용약관 및 개인정보 처리방침 링크를 호스팅 페이지와 자격 증명 확인 페이지에 적용합니다.
웹훅
결과가 나오는 즉시 전송되는 서명된 콜백.
세션을 생성할 때 웹훅 URL을 알려 주시면 세션이 끝나자마자 결과를 해당 URL로 전송해요. 폴링이 필요 없어요.
보내기만 하는 것이 아니라 서명까지
모든 전송에는 X-Bio-Signature 헤더가 포함돼요. 요청 본문의 HMAC-SHA256 값으로, 신뢰하기 전에 저희가 보낸 것임을 확인할 수 있어요.
보내고 잊어버리지 않고 재시도해요
실패한 전송은 세 번 재시도하며, 시도할 때마다 대기 시간이 길어져요.
모든 시도를 기록해요
성공이든 실패든 저희 쪽에서 시도 기록을 보관해요.
출시 예정 포털에서 모든 시도를 직접 확인할 수 있는 전송 로그는 곧 제공될 예정이에요.
가장 최근의 VERIFIED를 기준으로 삼으세요
재시도 때문에 드물게 전송이 순서대로 도착하지 않을 수 있어요. 웹훅 수신 자체를 로직의 기준으로 삼지 말고 세션 ID를 기준으로 삼아, 나중의 VERIFIED가 이전 것을 덮어쓰도록 하세요. 자체 상태를 관리한다면 웹훅 수신이 아니라 세션 ID로 중복을 제거하세요.
서명 확인하기
페이로드를 신뢰할 수 있는지 확인한 후에 처리하세요.
어떤 내용이든 파싱하기 전에 원본 요청 본문에 대해 HMAC-SHA256을 다시 계산하고 X-Bio-Signature와 비교하세요.
const crypto = require("crypto");
function verifySignature(rawBody, signatureHeader, secret) {
const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(expected, "hex");
const b = Buffer.from(signatureHeader || "", "hex");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
// Read the raw body — don't let a JSON body-parser touch it first.
app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => {
const signature = req.header("X-Bio-Signature") || "";
if (!verifySignature(req.body, signature, process.env.SHIELDID_WEBHOOK_SECRET)) {
return res.status(401).send("invalid signature");
}
const event = JSON.parse(req.body);
// Treat the latest VERIFIED status as authoritative; de-duplicate by session_id.
res.status(200).send("ok");
});JS 위젯
호스팅 흐름을 사용자 페이지에 그대로 넣어요.
위젯은 세션을 생성하고 동일한 호스팅 흐름을 iframe 안에 인라인으로 렌더링하므로, 신청자가 사이트를 벗어나지 않아요.
- 카메라와 마이크 접근 권한이 있는 iframe으로 렌더링되며, 크기는 컨테이너에 맞춰져요.
- 호스팅 페이지와 같은 방식으로, 세션이 끝나면 반환 URL과 웹훅을 통해 세션 상태를 읽습니다.
출시 예정 페이지 내 완료 콜백(onComplete, onCancel, onStep, 자동 크기 조절)은 곧 제공될 예정입니다. 그때까지는 return_url과 웹훅으로 세션 종료 시점을 확인하세요. 지금도 사용할 수 있습니다.
프로덕션에 배포하기 전에
위젯은 현재 브라우저에서 API 키를 직접 받을 수 있습니다. 이는 sandbox에서의 편의 기능일 뿐 프로덕션 방식이 아닙니다. 키는 서버 측에 보관한 채 자체 백엔드에서 세션을 생성하고, 위젯에는 생성된 세션만 전달하세요. 방문자의 브라우저가 읽을 수 있는 실제 키는 절대 전달하면 안 됩니다.
<script src="https://cdn.shieldid.ca/sdk/v1/widget.js"></script>
<div id="shieldid-verify"></div>
<script>
TLVerify.init({
apiKey: "vk_sand_your_key", // sandbox only — see the note above for production
containerId: "shieldid-verify",
returnUrl: "https://yourapp.example/verified",
webhookUrl: "https://yourapp.example/hooks/shieldid",
locale: "en",
});
</script>자격 확인 페이지
검증된 세션을 위한 공개 페이지입니다.
세션이 VERIFIED 상태가 되면 해당 세션의 자격 확인 링크에서 신청자 이름, 문서 유형, 상태를 쉬운 말로 확인할 수 있습니다. 공동 서명자, 안내 데스크 직원, 거래 상대방 등 링크를 가진 누구나 대시보드에 로그인하지 않고도 결과를 확인할 수 있습니다.
Jordan Reyes
샘플 데이터온타리오 운전면허증
확인 완료
- 확인하는 데 로그인이 필요하지 않습니다.
- 신분증 원본 이미지나 신뢰도 점수는 절대 표시되지 않으며, 상태와 신원 정보만 표시됩니다.
- 해당 요금제에서는 호스팅 페이지와 동일한 브랜딩이 적용됩니다.
연동 패턴
여섯 가지 업종이 이를 연동하는 방법입니다.
구성 요소는 어디서나 같습니다. 세션, 링크 또는 위젯, 웹훅입니다. 답이 언제 어떻게 필요한지에 따라 알맞은 패턴이 달라집니다.
법률 및 로펌
콘도 관리법인
핀테크 및 대출
마켓플레이스 및 긱 플랫폼
E-signature
문의
연동에 대한 솔직한 답변입니다.
시작하기
웹훅을 연결하고, 작동하는 모습을 확인하세요.
웹훅 URL로 sandbox 세션을 생성하고, 본인 휴대폰에서 인증을 실행한 다음, 전송되는 서명된 콜백을 확인해 보세요.