Skip to content
마지막 작성자: hyejung-song
최근 업데이트: 25. 7. 7. 오후 6:50

연동 예시: QR-MPM + direct 모드 ​

QR-MPM 방식과 direct 전송 모드 기반의 실제 연동 흐름 및 메시지 예시를 안내합니다.

이 예시는 QR-MPM 방식과 direct 전송모드 조합에 해당해요. 서비스 제공자(SP)는 자체 서버를 운영하고, 신분증 앱은 SP 서버에 직접 데이터를 요청하거나 VP(검증 가능한 제시 자료)를 제출해요.

1. 환경 설정 ​

  • SP 서버 주소 (예시): http://www.yourservice.com
  • 핸들러 경로
    • 프로필 요청: http://www.yourservice.com/mip/profile
    • 이미지 요청: http://www.yourservice.com/mip/image
    • VP 제출: http://www.yourservice.com/mip/vp
    • 오류 제출: http://www.yourservice.com/mip/error

QR-MPM direct mode 구성도

2. 메시지 흐름 요약 ​

  1. QR 생성

    • SP 서버가 거래코드(trxcode)를 발급하고 profile을 생성해 DB에 저장해요.
    • 이후 M200 메시지를 base64 인코딩해 QR 코드로 생성해요.
  2. QR 스캔

    • 신분증 앱이 QR을 스캔해 trxcode와 서버 정보를 가져와요.
  3. 프로필 요청

    • M310 메시지를 POST /mip/profile로 보내서 profile을 요청해요.
  4. VP 생성 및 제출

    • 인증 절차 완료 후, M400 메시지로 VP를 직접 제출해요.
  5. 결과 처리

    • 서버는 VP를 복호화하고 검증한 뒤 결과를 응답해요.

3. 단계별 메시지 예시 ​

[M200] VP 요청 메시지 (QR 생성용) ​

json
{
  "type": "mip",
  "version": "1.0.0",
  "cmd": "200",
  "trxcode": "20211102162732145432176790",
  "mode": "direct",
  "ci": false,
  "host": "http://www.yourservice.com"
}

QR 코드에는 이 메시지를 base64로 인코딩해서 삽입해요.

예:
ew0KICAidHlwZSI6Im1pcCIsDQogICJ2ZXJzaW9uIjoiMS4wLjAiLA0KICAiY21kIjoiMjAwIiwNCiAgInRyeGNvZGUiOiIyMDIxMTEwMjE2MjczMjE0NTQzMjE3Njc5MCIsDQogICJtb2RlIjoiZGlyZWN0IiwNCiAgImNpIjpmYWxzZSwNCiAgImhvc3QiOiJodHRwOi8vd3d3LnlvdXJzZXJ2aWNlLmNvbSINCn0

[M310] Profile 요청 메시지 ​

json
{
  "type": "mip",
  "version": "1.0.0",
  "cmd": "310",
  "request": "profile",
  "trxcode": "20211102162732145432176790"
}

HTTP 요청

http
POST /mip/profile HTTP/1.1
Host: www.yourservice.com
Content-Type: application/json; charset=UTF-8

{
  "data": "<base64 인코딩된 M310 메시지>"
}

HTTP 응답

http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

{
  "result": true,
  "data": "<base64 인코딩된 profile 데이터>"
}

[M400] VP 제출 메시지 ​

json
{
  "type": "mip",
  "version": "1.0.0",
  "cmd": "400",
  "request": "presentation",
  "trxcode": "20211102162732145432176790",
  "vp": {
    "presentType": 1,
    "encryptType": 2,
    "keyType": 3,
    "authType": ["pin", "face"],
    "did": "did:kr:mobileid:22siaYR7NxaDQR6HvE318kSu4xfP",
    "nonce": "2704b5e4eb5de74c3ff7956c53ae1dc9596a89545fe581755bee82995f7a83a2",
    "type": "VERIFY",
    "data": "<암호화된 base64 or hex 인코딩된 VP>"
  }
}

HTTP 요청

http
POST /mip/vp HTTP/1.1
Host: www.yourservice.com
Content-Type: application/json; charset=UTF-8

{
  "data": "<base64 인코딩된 M400 메시지>"
}

HTTP 응답

http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

{
  "result": true
}

참고 ​

  • 이 예시는 프로필 안에 callBackUrl이 없는 경우를 전제로 하며, 기본 핸들러 경로(/mip/*)를 사용해요.
  • QR에 포함된 M200 메시지에는 profile이 포함되어 있지 않기 때문에 반드시 M310으로 별도 요청해야 해요.