Appearance
연동 예시: 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
- 프로필 요청:

2. 메시지 흐름 요약
QR 생성
- SP 서버가 거래코드(
trxcode)를 발급하고profile을 생성해 DB에 저장해요. - 이후
M200메시지를 base64 인코딩해 QR 코드로 생성해요.
- SP 서버가 거래코드(
QR 스캔
- 신분증 앱이 QR을 스캔해
trxcode와 서버 정보를 가져와요.
- 신분증 앱이 QR을 스캔해
프로필 요청
M310메시지를POST /mip/profile로 보내서profile을 요청해요.
VP 생성 및 제출
- 인증 절차 완료 후,
M400메시지로 VP를 직접 제출해요.
- 인증 절차 완료 후,
결과 처리
- 서버는 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으로 별도 요청해야 해요.