문서 목차

문서/연동 예제

직접 만든 인증 화면

사용자 화면과 서비스 서버의 구성 예제

Markdown

구성#

화면은 인증 안내와 사용자 입력을 담당하고, 서버는 sendwich API 호출과 결과 처리를 담당합니다.

단계 서비스 서버 화면
시작 로그인한 사용자의 인증 시도 생성 인증 시작 버튼
생성 API 호출, 사용자와 인증 ID 연결 저장 받는 번호·인증 문자·남은 시간 표시
대기 웹훅 수신 또는 결과 조회 전송 안내, 확인·취소 버튼
완료 결과 검증, 서비스 작업 처리 완료 화면

서버 경로#

서비스 서버에 구현할 경로의 예시입니다.

경로 처리
POST /api/phone-verifications 사용자 인증·요청 제한, 시도 ID·state 생성, sendwich 생성 API 호출
GET /api/phone-verifications/{attempt} 사용자 소유 확인, 저장된 상태 반환 또는 sendwich 조회
POST /api/phone-verifications/{attempt}/cancel 사용자 소유 확인 후 취소 API 호출
POST /webhooks/sendwich 원본 본문으로 서명 검증, 연결된 시도 갱신

조회·취소 요청마다 시도의 소유자를 확인하고, 브라우저에는 화면에 필요한 값만 반환합니다. 쿠키 기반 로그인에서는 CSRF 방어도 적용합니다.

화면 데이터#

javascript
// 내 서버가 저장하고 전달한 생성 응답의 일부예요.
const instructions = {
  attempt: localAttemptId,
  destination: session.destination,
  sms_text: session.sms_text,
  expires_at: session.expires_at,
  server_time: session.server_time
};

받는 번호와 인증 문자를 선택·복사할 수 있도록 표시합니다. 사용자가 직접 문자를 전송하는 절차와 통신사 요금제에 따른 발송 요금을 안내합니다. 문자 앱 연결을 지원하지 않는 기기에서도 복사 기능으로 전송할 수 있어야 합니다.

상태 처리#

verified, expired, cancelled를 받거나 만료 시각이 지나면 주기적인 조회를 중단합니다. 통신 오류는 결과 미확인 상태로 표시하고 다시 조회할 수 있도록 합니다. 새 인증 시도에는 새 Idempotency-Key를 사용합니다.

웹훅으로 데이터베이스를 갱신하면 화면은 서비스 서버에 저장된 상태를 조회할 수 있습니다. sendwich API를 직접 조회할 때마다 사용량에 반영됩니다.

서버 호출은 Node.js·Python 클라이언트, 이벤트 수신은 웹훅 서명 검증 예제를 참고합니다.