Skip to content

Latest commit

Β 

History

History
1270 lines (988 loc) Β· 39.2 KB

Verifier_API_ko.md

File metadata and controls

1270 lines (988 loc) Β· 39.2 KB
puppeteer
pdf image
format displayHeaderFooter landscape scale margin
A4
true
false
0.8
top right bottom left
1.2cm
1cm
1cm
1cm
quality fullPage
100
false

Verifier API

  • 일자: 2025-05-30
  • 버전: v2.0.0

κ°œμ • 이λ ₯

버전 일자 λ³€κ²½ λ‚΄μš©
1.0.0 2024-09-03 졜초 μž‘μ„±
1.0.1 (dev) 2024-03-31 [4.1 Request Offer(QR)] μš”μ²­ 데이터 μˆ˜μ •(policyId μΆ”κ°€, device, service, mode μ‚­μ œ)
2.0.0 2025-05-30 [5. P311 - ZKP Proof 제좜 ν”„λ‘œν† μ½œ] μΆ”κ°€

λͺ©μ°¨

1. κ°œμš”

λ³Έ λ¬Έμ„œλŠ” Verifier Serviceκ°€ μ œκ³΅ν•˜λŠ” APIλ₯Ό μ •μ˜ν•œλ‹€.

Workflow

  • 상기 κ·Έλ¦Όμ—μ„œλŠ” Verifier Serviceκ°€ μ œκ³΅ν•˜κ±°λ‚˜ ν˜Ήμ€ Verifier Serviceκ°€ ν˜ΈμΆœν•˜λŠ” ν”„λ‘œν† μ½œ(Protocol)κ³Ό APIλ₯Ό ν‘œκΈ°ν•˜μ˜€μœΌλ©°, APIλŠ” 가독성을 μœ„ν•˜μ—¬ ν‘œμ€€ API (Standard API)λ§Œμ„ ν‘œκΈ°ν•˜μ˜€λ‹€.
  • 각 μš©μ–΄λŠ” 2μž₯μ—μ„œ μ„€λͺ…ν•˜λ©°, API λͺ©λ‘κ³Ό 호좜 μ˜ˆμ‹œ 등은 3μž₯ 이후뢀터 확인할 수 μžˆλ‹€.

2. μš©μ–΄ μ„€λͺ…

  • ν”„λ‘œν† μ½œ (Protocol)
    • νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ •ν•΄μ§„ μˆœμ„œμ— 따라 ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” 순차 API의 집합이닀. API 호좜 μˆœμ„œλ₯Ό μ—„κ²©νžˆ 따라야 ν•˜λ©°, μˆœμ„œκ°€ 잘λͺ»λ  경우 μ˜ˆμƒν•˜μ§€ λͺ»ν•œ κ²°κ³Όκ°€ λ°œμƒν•  수 μžˆλ‹€.
    • ν”„λ‘œν† μ½œμ€ P둜 μ‹œμž‘ν•˜κ³ , 3자리 숫자둜 κ΅¬μ„±λœλ‹€.
      • μ˜ˆμ‹œ: P310 - VP 제좜 ν”„λ‘œν† μ½œ, P311 - ZKP Proof 제좜 ν”„λ‘œν† μ½œ
  • 순차 API (Sequential API)
    • νŠΉμ • κΈ°λŠ₯(ν”„λ‘œν† μ½œ)을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ •ν•΄μ§„ μˆœμ„œλŒ€λ‘œ ν˜ΈμΆœν•˜λŠ” 일련의 APIλ₯Ό λ§ν•œλ‹€. 각 APIλŠ” 순차적으둜 ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λ©°, μˆœμ„œκ°€ 잘λͺ»λ  경우 μ œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
    • κ·ΈλŸ¬λ‚˜ 일뢀 ν”„λ‘œν† μ½œμ—μ„œλŠ” 같은 호좜 μˆœμ„œλ₯Ό κ°€μ§„ APIκ°€ μ‘΄μž¬ν•  수 있으며, 이 경우 ν•˜λ‚˜μ˜ APIλ₯Ό μ„ νƒν•˜μ—¬ ν˜ΈμΆœν•  수 μžˆλ‹€.
  • 단일 호좜 API (Single Call API)
    • 일반적인 REST API처럼 μˆœμ„œμ— 관계없이 λ…λ¦½μ μœΌλ‘œ 호좜 κ°€λŠ₯ν•œ APIλ₯Ό μ˜λ―Έν•œλ‹€.
  • ν‘œμ€€ API (Standard API)
    • API λ¬Έμ„œμ—μ„œ λͺ…ν™•ν•˜κ²Œ μ •μ˜λœ API둜, λͺ¨λ“  κ΅¬ν˜„μ²΄μ—μ„œ μΌκ΄€λœ λ°©μ‹μœΌλ‘œ μ œκ³΅λ˜μ–΄μ•Ό ν•œλ‹€. ν‘œμ€€ APIλŠ” μ‹œμŠ€ν…œ κ°„ μƒν˜Έ μš΄μš©μ„±μ„ 보μž₯ν•˜λ©°, 사전에 μ •μ˜λœ μŠ€νŽ™μ— 따라 λ™μž‘ν•΄μ•Ό ν•œλ‹€.
  • λΉ„ν‘œμ€€ API (Non-Standard API)
    • κ΅¬ν˜„μ²΄λ§ˆλ‹€ ν•„μš”μ— 따라 λ‹€λ₯΄κ²Œ μ •μ˜λ˜κ±°λ‚˜ μ»€μŠ€ν„°λ§ˆμ΄μ§•λ  수 μžˆλŠ” API이닀. λ³Έ λ¬Έμ„œμ—μ„œ μ œκ³΅ν•˜λŠ” λΉ„ν‘œμ€€ APIλŠ” ν•œ κ°€μ§€ μ˜ˆμ‹œμΌ 뿐이며, 각 κ΅¬ν˜„μ²΄μ— 맞좰 λ‹€λ₯΄κ²Œ κ΅¬ν˜„λ  수 μžˆλ‹€. 이 경우, κ΅¬ν˜„μ²΄λ³„ λ³„λ„μ˜ λ¬Έμ„œν™”κ°€ ν•„μš”ν•˜λ‹€.
    • 예λ₯Ό λ“€μ–΄, VP 제좜 κ²°κ³Ό 확인은 μ‹œμŠ€ν…œμ— 따라 κ΅¬ν˜„ 방법이 λ‹¬λΌμ§ˆ 수 있으며, confirm-verify API와 같은 λΉ„ν‘œμ€€ APIλŠ” 각 κ΅¬ν˜„μ²΄μ—μ„œ ν•„μš”ν•œ λ°©μ‹μœΌλ‘œ μž¬μ •μ˜ν•  수 μžˆλ‹€.

3. API λͺ©λ‘

3.1. 순차 API

3.1.1. P310 - VP 제좜 ν”„λ‘œν† μ½œ

Seq API URL Description ν‘œμ€€API
1 request-offer-qr /api/v1/request-offer-qr VP 제좜 Offer μš”μ²­ (QR) N
2 request-profile /api/v1/request-profile 제좜 Profile μš”μ²­ Y
3 request-verify /api/v1/request-verify VP 제좜 Y
4 confirm-verify /api/v1/confirm-verify VP 제좜 κ²°κ³Ό 확인 N

3.1.2. P311 - ZKP Proof 제좜 ν”„λ‘œν† μ½œ

Seq API URL Description ν‘œμ€€API
1 request-proof-request-profile /api/v1/request-proof-request-profile ZKP Proof μš”μ²­ Profile μš”μ²­ Y
2 request-verify-proof /api/v1/request-verify-proof ZKP Proof 제좜 Y

3.2. λ‹¨μΌν˜ΈμΆœ API

API URL Description ν‘œμ€€API
issue-certificate-vc /api/v1/certificate-vc Entity 등둝 μš”μ²­ N
get-certificate-vc /api/v1/certificate-vc κ°€μž…μ¦λͺ…μ„œ 쑰회 N

4. P310 - VP 제좜 ν”„λ‘œν† μ½œ

Seq. API Description ν‘œμ€€API
1 request-offer-qr VP 제좜 Offer μš”μ²­ (QR) N
2 request-profile 제좜 Profile μš”μ²­ Y
3 request-verify VP 제좜 Y
4 confirm-verify VP 제좜 κ²°κ³Ό 확인 N
  • VP 제좜 ν”„λ‘œν† μ½œμ€ 상황에 따라 API ν˜ΈμΆœμžκ°€ λ‹€μ–‘ν•˜κΈ° λ•Œλ¬Έμ— λ©”μ‹œμ§€μ— txIdλ₯Ό 항상 μ²¨λΆ€ν•˜κΈ°λŠ” μ–΄λ ΅λ‹€.
  • λ”°λΌμ„œ Verifier ServiceλŠ” txIdλ₯Ό μƒμ„±ν•˜μ—¬ 응닡할 수 μžˆμœΌλ‚˜ μš”μ²­λ¬Έμ— 이λ₯Ό ν¬ν•¨ν•˜κΈ°λ₯Ό κ°•μ œν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.

4.1. Request Offer (QR)

VP 제좜 μ„Έμ…˜ 정보λ₯Ό μš”μ²­ν•œλ‹€.

VerifierλŠ” 제좜 받을 VP의 정보λ₯Ό 이미 κ°€μ§€κ³  μžˆμ–΄μ„œ, Verifierκ°€ μ‘λŒ€μž₯μΉ˜μ—κ²Œ 제좜 μ„Έμ…˜ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€. 이 제좜 μ„Έμ…˜ 정보λ₯Ό "Verify Offer"라고 μΉ­ν•œλ‹€.

ν•΄λ‹Ή APIλŠ” Verify Offer의 Payloadλ₯Ό μ „μ†‘ν•˜λ©°, μ‘λŒ€μž₯μΉ˜λŠ” ν•΄λ‹Ή Payloadλ₯Ό QR둜 λ³€ν™˜μ‹œμΌœ 화면에 좜λ ₯ν•  수 μžˆλ‹€.

Item Description Remarks
Method POST
Path /api/v1/request-offer-qr
Authorization -

4.1.1. Request

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  HTTP Body

def object RequestOfferQr: "Request Offer QR μš”μ²­λ¬Έ"
{    
    - messageId "id": "message id"       
    + itemName "policyId": "VP μ •μ±…(Policy) μ‹λ³„μž"
}

4.1.2. Response

β–  Process

  1. policyId둜 VP Policy 쑰회
  2. offerId 생성
  3. offer μœ νš¨μ‹œκ°„ 생성 (validUntil)
  4. Verify Offer Payload 생성
  5. offerId λ§€ν•‘ν•˜μ—¬ μ €μž₯
    • mode, device, service, policyId, validUntil

β–  Status 200 - Success

def object _RequestOfferQr: "Request Offer QR 응닡문"
{    
    + uuid "txId"  : "transaction id"
    + VerifyOfferPayload "payload" : "제좜 Offer Payload" // 데이터 λͺ…μ„Έμ„œ μ°Έκ³ 
}

β–  Status 400 - Client error

μ½”λ“œ μ„€λͺ…
SSRVVRF00201 "VP_POLICYλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."

β–  Status 500 - Server error

μ½”λ“œ μ„€λͺ…
SSRVVRF00900 "'request-offer-qr' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

4.1.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/request-offer-qr" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
{
  "id":"202303241738241234561234ABCD",
  "policyId": "f1a2b3c4-d5e6-7890-1234-56789abcdef0"
}

β–  Response

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

{    
  "txId": "70e22f4e-ca60-48d3-88ee-a43d42ad3313",
  "payload": {
    "offerId": "3bf6a1a0-beca-4450-a01e-4e2166819504",
    "type": "VerifyOffer",
    "mode": "Direct",
    "device": "WEB",
    "service": "login",
    "endpoints": [
      "http://127.0.0.130:8092/verifier/api/v1/request-verify"
    ],
    "validUntil": "2024-01-01T08:44:58.048519445Z",
    "locked": false
  }
}

4.2. Request Profile

offerIdλ₯Ό μ œμΆœν•˜μ—¬ VerifyProfile을 μš”μ²­ν•œλ‹€.

Item Description Remarks
Method POST
Path /api/v1/request-profile
Authorization -

4.2.1. Request

β–  Headers

Header Value Remarks
+ Content-Type application/json;charset=utf-8

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  Body

def object M310_RequestProfile: "Request Profile μš”μ²­λ¬Έ"
{
    //--- Common Part ---
    + messageId "id"  : "message id"
    - uuid      "txId": "transaction id"
    //--- Data Part ---
    + uuid "offerId" : "verify offer id"
}

4.2.2. Response

β–  Process

  1. (ν•„μš”μ‹œ)κ±°λž˜μ½”λ“œ 확인
  2. offerId μœ νš¨μ„± 확인
  3. profile = VerifyProfile μƒμ„±ν•˜μ—¬ μ„œλͺ… 첨뢀

β–  Status 200 - Success

def object _M310_RequestProfile: "Request Profile 응닡문"
{    
    //--- Common Part ---
    + uuid "txId": "transaction id"

    //--- Data Part ---
    + VerifyProfile "profile": "verify profile"
}

β–  Status 400 - Client error

Code Description
SSRVVRF00200 "VP_OFFERλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00201 "VP_POLICYλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00300 "νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00301 "νŠΈλžœμž­μ…˜ μƒνƒœκ°€ λŒ€κΈ° 쀑이 μ•„λ‹™λ‹ˆλ‹€."
SSRVVRF00302 "νŠΈλžœμž­μ…˜μ΄ λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00303 "ν•˜μœ„ νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."

β–  Status 500 - Server error

Code Description
SSRVVRF00401 "μ•”ν˜Έν™” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00408 "ν‚€ 쌍 생성에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00502 "곡개 ν‚€ 압좕에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00600 "DID λ¬Έμ„œ 검색에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00902 "'request-profile' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

4.2.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/request-profile" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
//data.json
{
  "txId": "b38aa1e3-48fa-4f5f-be60-05042d9ec660",
  "offerId": "3bf6a1a0-beca-4450-a01e-4e2166819504",
  "id": "202303241738241234561234ABCD"
}

β–  Response

HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
{
  "txId": "b38aa1e3-48fa-4f5f-be60-05042d9ec660",
  "profile": {
    "id": "b8302842-0d9b-4f95-9da8-5ae3bbf8dd69",
    "type": "VerifyProfile",
    "title": "OpenDID 둜그인 VP ν”„λ‘œνŒŒμΌ",
    "description": "OpenDID λ‘œκ·ΈμΈμ„ μœ„ν•΄ 제좜이 ν•„μš”ν•œ VP에 λŒ€ν•œ ν”„λ‘œνŒŒμΌ μž…λ‹ˆλ‹€.",
    "encoding": "UTF-8",
    "language": "ko",
    "profile": {
      "verifier": {
        "did": "did:omn:verifier",
        "certVcRef": "http://127.0.0.130:8092/verifier/api/v1/certificate-vc",
        "name": "verifier",
        "description": "verifier",
        "ref": "http://127.0.0.130:8092/swagger-ui/index.html#/"
      },
      "filter": {
        "credentialSchemas": [
          {
            "id": "http://127.0.0.130:8091/issuer/api/v1/vc/vcschema?name=mdl",
            "type": "OsdSchemaCredential",
            "value": "VerifiableProfile",
            "presentAll": false,
            "displayClaims": [
              "testId.aa"
            ],
            "requiredClaims": [
              "org.iso.18013.5.birth_date",
              "org.iso.18013.5.family_name",
              "org.iso.18013.5.given_name"
            ],
            "allowedIssuers": [
              "did:omn:issuer"
            ]
          }
        ]
      },
      "process": {
        "endpoints": [
          "http://127.0.0.130:8092/verifier/api/v1/request-verify"
        ],
        "reqE2e": {
          "nonce": "mLXd8kMD3pb4WRAnchWudXA",
          "curve": "Secp256r1",
          "publicKey": "z26VWT8GTUxNdRAXUThK4rRPzAeWsXf7....",
          "cipher": "AES-256-CBC",
          "padding": "PKCS5"
        },
        "verifierNonce": "mLXd8kMD3pb4WRAnchWudXA",
        "authType": 6
      }
    },
    "proof": {
      "type": "Secp256r1Signature2018",
      "created": "2024-10-25T17:42:09.060550Z",
      "verificationMethod": "did:omn:verifier?versionId=1#assert",
      "proofPurpose": "assertionMethod",
      "proofValue": "z3m8feWmLrhsYkym2PcfmpHe1sRkL5BQba4d...."
    }
  }
}

4.3. Request Verify

μ•”ν˜Έν™”λœ VPλ₯Ό μˆ˜μ‹ ν•˜μ—¬ λ³΅ν˜Έν™”ν•˜κ³  검증 ν›„ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

Item Description Remarks
Method POST
Path /api/v1/request-verify
Authorization -

4.3.1. Request

β–  Headers

Header Value Remarks
+ Content-Type application/json;charset=utf-8

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  Body

def object M310_RequestVerify: "Request Verify μš”μ²­λ¬Έ"
{
    //--- Common Part ---
    + messageId "id"  : "message id"
    - uuid      "txId": "transaction id"

    //--- Data Part ---
    + AccE2e    "accE2e": "E2E μˆ˜λ½μ •λ³΄"
    + multibase "encVp" : "multibase(enc((Vp)vp))"
}
  • ~/accE2e: VerifyProfile:~/profile/process/reqE2e에 λŒ€μ‘ν•œ E2E μˆ˜λ½μ •λ³΄
  • ~/encVp: E2E ν‚€λ‘œ μ•”ν˜Έν™”λœ VP

4.3.2. Response

E2E μˆ˜λ½μ •λ³΄λ₯Ό μ΄μš©ν•˜μ—¬ E2E μ•”ν˜Έν™”ν‚€λ₯Ό μƒμ„±ν•˜κ³ , VPλ₯Ό λ³΅ν˜Έν™”ν•œλ‹€. VP λ‚΄μ˜ verifierNonceκ°€ 검증 μ‚¬μ—…μžκ°€ μ œκ³΅ν•œ 것과 μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬μ•Ό ν•œλ‹€.

β–  Process

  1. κ±°λž˜μ½”λ“œ 확인
  2. (있으면)accE2e.proof μ„œλͺ… 검증
  3. E2E ECDH μˆ˜ν–‰
    • e2eKey = μ•”ν˜Έν™”ν‚€ 생성
    • iv = accE2e.iv
  4. encVp λ³΅ν˜Έν™”
    • vp = dec(debase(encVp), e2eKey, iv, padding)
  5. vp λ‚΄μš© 확인
    • profile/process/verifierNonce μΌμΉ˜μ—¬λΆ€ 확인
    • μ΄μŠˆμ–΄ μ„œλͺ… 검증
  6. 뢀인방지가 ν•„μš”ν•œ 경우 vp μ•”ν˜Έν™”ν•˜μ—¬ μ €μž₯ (μ•”ν˜Έν™” 방법은 out of scope)
  7. μ„œλΉ„μŠ€ 제곡 (검증 μ‚¬μ—…μžμ˜ μ„œλΉ„μŠ€μ— 따름)

β–  Status 200 - Success

def object _M310_RequestVerify: "Request Verify 응닡문"
{    
    //--- Common Part ---
    + uuid "txId": "transaction id"
}

β–  Status 400 - Client error

Code Description
SSRVVRF00107 "데이터 λ””μ½”λ”© μ‹€νŒ¨: 잘λͺ»λœ 인코딩"
SSRVVRF00300 "νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00301 "νŠΈλžœμž­μ…˜ μƒνƒœκ°€ μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
SSRVVRF00302 "νŠΈλžœμž­μ…˜μ΄ λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00303 "ν•˜μœ„ νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00304 "ν•˜μœ„ νŠΈλžœμž­μ…˜ μƒνƒœκ°€ μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
SSRVVRF00402 "μœ νš¨ν•˜μ§€ μ•Šμ€ nonceμž…λ‹ˆλ‹€."
SSRVVRF00403 "μœ νš¨ν•˜μ§€ μ•Šμ€ ProofPurpose μž…λ‹ˆλ‹€."

β–  Status 500 - Server error

Code Description
SSRVVRF00101 "JSON νŒŒμ‹±μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00103 "λΈ”λ‘μ²΄μΈμ—μ„œ DID Doc 검색에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00104 "μ„œλͺ… 검증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00105 "ν•΄μ‹œ 생성에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00106 "데이터 인코딩에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00202 "VP 검증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00204 "VP ν”„λ‘œνŒŒμΌ νŒŒμ‹±μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00400 "μœ νš¨ν•˜μ§€ μ•Šμ€ AuthType: μœ ν˜• 뢈일치."
SSRVVRF00401 "μ•”ν˜Έν™” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00601 "DID Doc을 μ°ΎλŠ”λ° μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00700 "E2Eλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00701 "E2Eκ°€ μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
SSRVVRF00903 "'request-verify' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

4.3.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/request-verify" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
{
  {
    "accE2e": {
      "iv": "z2SXXDRzxTyKt8ua7Y96GPK",
      "proof": {
        "created": "2024-01-01T06:32:33Z",
        "proofPurpose": "keyAgreement",
        "proofValue": "z3odiy3M5SJMGzXHXyQZKEFMXaqPGcBVyTPYKURKA....",//encodeData
        "type": "Secp256r1Signature2018",
        "verificationMethod": "did:omn:iuBdTVmXCwntmEtjPR5eYZRLM5W?versionId=1#keyagree"
      },
      "publicKey": "z21hpr3CASVzgJ2azYZtxzedTmKyKLRoaNGiK9vGfLPCQJ"
    },
    "encVp": "zRedoZXk23311kmCg4yKEwLBAxz2RG4P6hopt9Dn4CS....",//encodeData
    "id": "202410241532334100006CE70B2E",
    "txId": "a3333175-a799-4ae3-8f9c-5b9f4c0f579f"
  }
}

β–  Response

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

{
    "txId":"a3333175-a799-4ae3-8f9c-5b9f4c0f579f"
}

4.4. Confirm Verify

VP 제좜 κ²°κ³Όλ₯Ό μ‘°νšŒν•œλ‹€.

μΈκ°€μ•±μ—μ„œ μ œμΆœν•œ VPμ—μ„œ ν΄λ ˆμž„ 정보듀도 μΆ”μΆœν•˜μ—¬ μ „λ‹¬ν•œλ‹€. ν΄λ ˆμž„μ€ κ°œμΈμ •λ³΄κ°€ ν¬ν•¨λ˜μ–΄ μžˆμ„ 수 μžˆμœΌλ‚˜, ν…ŒμŠ€νŠΈμ˜ νŽΈμ˜μ„±μ„ μœ„ν•˜μ—¬ λ”°λ‘œ μ•”ν˜Έν™”λ₯Ό 처리λ₯Ό ν•˜μ§€ μ•ŠλŠ”λ‹€.

Item Description Remarks
Method POST
Path /api/v1/confirm-verify
Authorization -

4.4.1. Request

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  HTTP Body

def object ConfirmVerify: "Confirm Verify μš”μ²­λ¬Έ"
{    
    + uuid  "offerId": "제좜 offer id" 
}

4.4.2. Response

β–  Process

  1. offerId둜 VP 제좜 정보 쑰회
  2. VP 제좜 μ •λ³΄μ—μ„œ ν΄λ ˆμž„ 정보 μΆ”μΆœ

β–  Status 200 - Success

def object _ConfirmVerify: "Confirm Verify 응닡문"
{    
    + bool "result": "VP 제좜 결과"
    - array(Claim) "claims" : "μ œμΆœν•œ ν΄λ ˆμž„ 정보" // 데이터 λͺ…μ„Έμ„œ μ°Έκ³ 
}

β–  Status 400 - Client error

μ½”λ“œ μ„€λͺ…
SSRVVRF00300 "νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00200 "VP_OFFERλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."

β–  Status 500 - Server error

μ½”λ“œ μ„€λͺ…
SSRVVRF00901 "'confirm-verify' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

4.4.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/confirm-verify" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
{    
  "offerId":"5e6af61a-96f3-42db-9359-d4299f6e7a8f"
}

β–  Response

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

{
    "claims": [
        {
        "code": "org.iso.18013.5.family_name",
        "caption": "Family Name",
        "value": "Kim",
        "type": "text",
        "format": "plain",
        "hideValue": false
        },
        {
        "code": "org.iso.18013.5.given_name",
        "caption": "Given Name",
        "value": "Raon",
        "type": "text",
        "format": "plain",
        "hideValue": false
        },
        {
        "code": "org.iso.18013.5.birth_date",
        "caption": "Birth date",
        "value": "2024-01-01",
        "type": "text",
        "format": "plain",
        "hideValue": false
        }
    ],
    "result": true
}

5. P311 - ZKP Proof 제좜 ν”„λ‘œν† μ½œ

Seq. API Description ν‘œμ€€API
1 request-proof-request-profile ZKP Proof μš”μ²­ Profile μš”μ²­ Y
2 request-verify-proof ZKP Proof 제좜 Y
  • ZKP Proof 제좜 ν”„λ‘œν† μ½œμ€ μ˜μ§€μ‹ 증λͺ…(Zero-Knowledge Proof)을 ν™œμš©ν•œ VP 제좜 방식이닀.
  • κΈ°μ‘΄ VP 제좜과 달리 μ‹€μ œ ν΄λ ˆμž„ 값을 λ…ΈμΆœν•˜μ§€ μ•Šκ³ λ„ νŠΉμ • 쑰건을 λ§Œμ‘±ν•¨μ„ 증λͺ…ν•  수 μžˆλ‹€.

5.1. Request Proof Request Profile

ZKP Proof μš”μ²­μ— ν•„μš”ν•œ Profile 정보λ₯Ό μš”μ²­ν•œλ‹€.

VerifierλŠ” ZKP 검증에 ν•„μš”ν•œ 증λͺ… μš”κ΅¬μ‚¬ν•­κ³Ό νŒŒλΌλ―Έν„°λ₯Ό ν¬ν•¨ν•œ ProofRequestProfile을 μ œκ³΅ν•œλ‹€.

Item Description Remarks
Method POST
Path /api/v1/request-proof-request-profile
Authorization -

5.1.1. Request

β–  Headers

Header Value Remarks
+ Content-Type application/json;charset=utf-8

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  Body

def object M311_RequestProofRequestProfile: "Request Proof Request Profile μš”μ²­λ¬Έ"
{
    //--- Common Part ---
    + messageId "id"  : "message id"
    - uuid      "txId": "transaction id"
    //--- Data Part ---
    + uuid "offerId" : "verify offer id"    
}

5.1.2. Response

β–  Process

  1. (ν•„μš”μ‹œ)κ±°λž˜μ½”λ“œ 확인
  2. offerId μœ νš¨μ„± 확인
  3. offerId λ₯Ό 톡해 proofType확인후 ProofRequestProfile μƒμ„±ν•˜μ—¬ μ„œλͺ… 첨뢀

β–  Status 200 - Success

def object _M311_RequestProofRequestProfile: "Request Proof Request Profile 응닡문"
{    
    //--- Common Part ---
    + uuid "txId": "transaction id"

    //--- Data Part ---
    + ProofRequestProfile "proofRequestProfile": "ZKP proof request profile"
    //데이터 λͺ…μ„Έμ„œ 확인 ν•„μš”
}

β–  Status 400 - Client error

Code Description
SSRVVRF00200 "VP_OFFERλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00201 "VP_POLICYλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00300 "νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00301 "νŠΈλžœμž­μ…˜ μƒνƒœκ°€ λŒ€κΈ° 쀑이 μ•„λ‹™λ‹ˆλ‹€."
SSRVVRF00302 "νŠΈλžœμž­μ…˜μ΄ λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00303 "ν•˜μœ„ νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00310 "μ§€μ›ν•˜μ§€ μ•ŠλŠ” 증λͺ… μœ ν˜•μž…λ‹ˆλ‹€."

β–  Status 500 - Server error

Code Description
SSRVVRF00401 "μ•”ν˜Έν™” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00408 "ν‚€ 쌍 생성에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00502 "곡개 ν‚€ 압좕에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00600 "DID λ¬Έμ„œ 검색에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00910 "'request-proof-request-profile' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

5.1.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/request-proof-request-profile" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
//data.json
{
  "txId": "b38aa1e3-48fa-4f5f-be60-05042d9ec660",
  "offerId": "3bf6a1a0-beca-4450-a01e-4e2166819504",
  "id": "202303241738241234561234ABCD",
}

β–  Response

HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
{
  "txId": "b38aa1e3-48fa-4f5f-be60-05042d9ec660",
  "proofRequestProfile": {
    "id": "c8302842-0d9b-4f95-9da8-5ae3bbf8dd70",
    "type": "ProofRequestProfile",
    "title": "μ—°λ Ή λ²”μœ„ 증λͺ… μš”μ²­ ν”„λ‘œνŒŒμΌ",
    "description": "만 18μ„Έ μ΄μƒμž„μ„ ZKP둜 증λͺ…ν•˜κΈ° μœ„ν•œ ν”„λ‘œνŒŒμΌμž…λ‹ˆλ‹€.",
    "encoding": "UTF-8",
    "language": "ko",
    "profile": {
      "verifier": {
        "did": "did:omn:verifier",
        "certVcRef": "http://127.0.0.130:8092/verifier/api/v1/certificate-vc",
        "name": "verifier",
        "description": "verifier",
        "ref": "http://127.0.0.130:8092/swagger-ui/index.html#/"
      },
      "proofRequest": {
        "name": "mdl",
        "nonce": "1068995366822249097155600",
        "requestedAttributes": {
          "attributeReferent1": {
            "name": "zkpsex",
            "restrictions": [
              {
                "credDefId": "did:omn:NcYxiDXkpYi6ov5FcYDi1e:3:CL:did:omn:NcYxiDXkpYi6ov5FcYDi1e:2:schemaname:1.0:Tag1"
              }
            ]
          }
        },
        "requestedPredicates": {
          "predicateReferent1": {
            "name": "zkpbirth",
            "pType": "LE",
            "pValue": 20200103,
            "restrictions": [
              {
                "credDefId": "did:omn:NcYxiDXkpYi6ov5FcYDi1e:3:CL:did:omn:NcYxiDXkpYi6ov5FcYDi1e:2:schemaname:1.0:Tag1"
              }
            ]
          }
        }
      },
        "reqE2e": {
          "nonce": "mLXd8kMD3pb4WRAnchWudXA",
          "curve": "Secp256r1",
          "publicKey": "z26VWT8GTUxNdRAXUThK4rRPzAeWsXf7....",
          "cipher": "AES-256-CBC",
          "padding": "PKCS5"
        },
    },
    "proof": {
      "type": "Secp256r1Signature2018",
      "created": "2024-10-25T17:42:09.060550Z",
      "verificationMethod": "did:omn:verifier?versionId=1#assert",
      "proofPurpose": "assertionMethod",
      "proofValue": "z3m8feWmLrhsYkym2PcfmpHe1sRkL5BQba4e...."
    }
  }
}

5.2. Request Verify Proof

ZKP Proofλ₯Ό μˆ˜μ‹ ν•˜μ—¬ κ²€μ¦ν•œλ‹€.

Item Description Remarks
Method POST
Path /api/v1/request-verify-proof
Authorization -

5.2.1. Request

β–  Headers

Header Value Remarks
+ Content-Type application/json;charset=utf-8

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  Body

def object M311_RequestVerifyProof: "Request Verify Proof μš”μ²­λ¬Έ"
{
    //--- Common Part ---
    + messageId "id"  : "message id"
    - uuid      "txId": "transaction id"

    //--- Data Part ---
    + AccE2e    "accE2e": "E2E μˆ˜λ½μ •λ³΄"
    + multibase "encProof" : "multibase(enc((Proof)proof))"    
    + BigInterger  "nonce": "Proof Nonce"   
}
  • ~/accE2e: reqE2e에 λŒ€μ‘ν•œ E2E μˆ˜λ½μ •λ³΄
  • ~/encProof: E2E ν‚€λ‘œ μ•”ν˜Έν™”λœ Proof: 증λͺ…에 μ‚¬μš©λœ 곡개 μž…λ ₯κ°’λ“€
  • ~/nonce: ProofRequestProfileμ—μ„œ 제곡된 λ…ΌμŠ€

5.2.2. Response

ZKP Proofλ₯Ό κ²€μ¦ν•˜κ³  증λͺ… κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.

β–  Process

  1. κ±°λž˜μ½”λ“œ 확인
  2. nonce μΌμΉ˜μ—¬λΆ€ 확인
  3. ZKP 증λͺ… 검증
    • 회둜 νŒŒλΌλ―Έν„° 확인
    • 곡개 μž…λ ₯κ°’ 검증
    • 증λͺ… μœ νš¨μ„± 확인
  4. 증λͺ… κ²°κ³Ό μ €μž₯ (μ œμΆœμ—¬λΆ€λ§Œ)
  5. μ„œλΉ„μŠ€ 제곡 (검증 μ‚¬μ—…μžμ˜ μ„œλΉ„μŠ€μ— 따름)

β–  Status 200 - Success

def object _M311_RequestVerifyProof: "Request Verify Proof 응닡문"
{    
    //--- Common Part ---
    + uuid "txId": "transaction id"
    
    //--- Data Part ---
    + bool "verified": "증λͺ… 검증 κ²°κ³Ό"
    - string "proofType": "증λͺ… μœ ν˜•"
    - object "verificationDetails": "검증 상세 정보"
}

β–  Status 400 - Client error

Code Description
SSRVVRF00300 "νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00301 "νŠΈλžœμž­μ…˜ μƒνƒœκ°€ μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
SSRVVRF00302 "νŠΈλžœμž­μ…˜μ΄ λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00303 "ν•˜μœ„ νŠΈλžœμž­μ…˜μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00304 "ν•˜μœ„ νŠΈλžœμž­μ…˜ μƒνƒœκ°€ μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."
SSRVVRF00402 "μœ νš¨ν•˜μ§€ μ•Šμ€ nonceμž…λ‹ˆλ‹€."
SSRVVRF00311 "μœ νš¨ν•˜μ§€ μ•Šμ€ ZKP 증λͺ…μž…λ‹ˆλ‹€."
SSRVVRF00312 "곡개 μž…λ ₯값이 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."

β–  Status 500 - Server error

Code Description
SSRVVRF00101 "JSON νŒŒμ‹±μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00105 "ν•΄μ‹œ 생성에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00106 "데이터 인코딩에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00210 "ZKP 증λͺ… 검증에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00911 "'request-verify-proof' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

5.2.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/request-verify-proof" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
{
  "accE2e": {
    "iv": "zXnp5USMEwh9bkFYosG7jBS",
    "proof": {
      "created": "2025-05-26T10:39:01Z",
      "proofPurpose": "keyAgreement",
      "proofValue": "z3n6CBRfE3hJfmiLtLV9jDsPrGzMpbGy2HyufiTYJ4bs7rWmCytt1ZAtXiX24Veo14uNPLZisoi2bYqZ43BASRqVjb",
      "type": "Secp256r1Signature2018",
      "verificationMethod": "did:omn:AS8rQZnKx7atQH2boY3V8CVvCMo?versionId=1#keyagree"
    },
    "publicKey": "znRs8Um87H9iGoK1iuyums9pndSdLcxdhM8r8TNaDxv1A"
  },
  "encProof": "mnV+UxOXHVMK8fTakXpslk74k66rrJjM+PUvx2BS701f/", //encrypt Proof Data
  "id": "202505261939035230006BFD300B",
  "nonce": "134599285294987166794747",
  "txId": "29db231a-4c25-4e6b-afcc-7a709b3c9638"
}

β–  Response

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

{
  "txId": "a3333175-a799-4ae3-8f9c-5b9f4c0f579f"
}

6. 단일 호좜 API

단일 호좜 APIλŠ” νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” ν•˜λ‚˜μ˜ λ…λ¦½λœ API이닀. λ”°λΌμ„œ μˆœμ„œλŒ€λ‘œ ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” API의 집단인 순차 API(aka, ν”„λ‘œν† μ½œ)이 μ•„λ‹ˆλ―€λ‘œ ν”„λ‘œν† μ½œ λ²ˆν˜Έκ°€ λΆ€μ—¬λ˜μ§€ μ•ŠλŠ”λ‹€. Verifier Serviceκ°€ μ œκ³΅ν•˜λŠ” 단일 호좜 API λͺ©λ‘μ€ μ•„λž˜ ν‘œμ™€ κ°™λ‹€.

API URL Description ν‘œμ€€API
issue-certificate-vc /api/v1/certificate-vc Entity 등둝 μš”μ²­ N
get-certificate-vc /api/v1/certificate-vc κ°€μž…μ¦λͺ…μ„œ 쑰회 N

β–  Authorization

ν”„λ‘œν† μ½œμ—λŠ” '호좜자의 호좜 κΆŒν•œμ„ 확인'(authorization)ν•˜λŠ” APIκ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€. 상기 λͺ©λ‘μ˜ 단일 호좜 APIλŠ” authroization에 λŒ€ν•˜μ—¬ μ •μ˜ν•˜μ§€ μ•Šμ•˜μœΌλ‚˜, ν–₯ν›„ λ‹€μŒμ˜ λ°©μ•ˆμ„ κ³ λ €ν•˜μ—¬ μΆ”κ°€ν•  μ˜ˆμ •μ΄λ‹€.

  • 1μ•ˆ) 인가앱 μ‚¬μ—…μžκ°€ μ„œλͺ…ν•œ AttestedAppInfo 정보λ₯Ό ν™•μΈν•œ ν›„ 일정기간 μ‚¬μš©μ΄ κ°€λŠ₯ν•œ 토큰을 λ°œκΈ‰
    • 단일 API 호좜 μ‹œ 헀더에 TAS λ°œν–‰ 토큰을 첨뢀
    • λ³„λ„μ˜ 토큰 관리 API ν•„μš”
  • 2μ•ˆ) 인가앱 μ‚¬μ—…μžκ°€ 인가앱에 토큰을 λ°œν–‰ν•˜κ³  TASκ°€ 인가앱 μ‚¬μ—…μžμ— 토큰 검증을 μš”μ²­
    • 단일 API 호좜 μ‹œ 헀더에 인가앱 μ‚¬μ—…μž λ°œν–‰ 토큰을 첨뢀
    • 인가앱 μ‚¬μ—…μžκ°€ 토큰을 λ°œν–‰ν•˜κ³  κ²€μ¦ν•΄μ£ΌλŠ” κΈ°λŠ₯ κ΅¬ν˜„ ν•„μš”

6.1. Issue Certificate VC

κ°€μž…μ¦λͺ…μ„œ λ°œκΈ‰μ„ μš”μ²­ν•œλ‹€.

Verifier의 DID Documentκ°€ TAS κ΄€λ¦¬μžλ₯Ό ν†΅ν•˜μ—¬ μ €μž₯μ†Œ(예:블둝체인)에 이미 λ“±λ‘λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. 이 APIμ—μ„œλŠ” TAS의 P120 ν”„λ‘œν† μ½œ APIλ₯Ό μˆœμ„œλŒ€λ‘œ ν˜ΈμΆœν•˜μ—¬ κ°€μž…μ¦λͺ…μ„œλ₯Ό λ°œκΈ‰ λ°›λŠ”λ‹€.

Item Description Remarks
Method POST
Path /api/v1/certificate-vc
Authorization -

6.1.1. Request

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  HTTP Body

def object IssueCertificateVc: "Issue Certificate VC μš”μ²­λ¬Έ"
{    
}

6.1.2. Response

β–  Process

  1. TA P120 ν”„λ‘œν† μ½œμ˜ APIλ₯Ό μˆœμ„œλŒ€λ‘œ 호좜
  2. λ°œκΈ‰λ°›μ€ κ°€μž…μ¦λͺ…μ„œλ₯Ό DB에 μ €μž₯

β–  Status 200 - Success

def object _IssueCertificateVc: "Issue Certificate VC 응닡문"
{    
}

β–  Status 400 - Client error

N/A

β–  Status 500 - Server error

Code Description
SSRVVRF00401 "μ•”ν˜Έν™” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€."
SSRVVRF00905 "'issue-certificate-vc' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

6.1.3. Example

β–  Request

curl -v -X POST "http://${Host}:${Port}/verifier/api/v1/certificate-vc" \
-H "Content-Type: application/json;charset=utf-8" \
-d @"data.json"
{
  //no data   
}

β–  Response

HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
{
    //no data
}

6.2. Get Certificate Vc

κ°€μž…μ¦λͺ…μ„œλ₯Ό μ‘°νšŒν•œλ‹€.

Item Description Remarks
Method GET
Path /api/v1/certificate-vc
Authorization -

6.2.1. Request

β–  HTTP Headers

Header Value Remarks
+ Content-Type application/json;charset=utf-8

β–  Path Parameters

N/A

β–  Query Parameters

N/A

β–  HTTP Body

N/A

6.2.2. Response

β–  Process

  1. κ°€μž…μ¦λͺ…μ„œ 쑰회

β–  Status 200 - Success

def object _GetCertificateVc: "Get Certificate VC 응닡문"
{
    @spread(Vc)  // 데이터 λͺ…μ„Έμ„œ μ°Έκ³ 
}

β–  Status 400 - Client error

N/A

β–  Status 500 - Server error

Code Description
SSRVVRF00800 "μΈμ¦μ„œ VC 데이터λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
SSRVVRF00904 "'certificate-vc' API μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."

6.2.3. Example

β–  Request

curl -v -X GET "http://${Host}:${Port}/verifier/api/v1/certificate-vc"

β–  Response

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

{
  "@context": [
    "https://www.w3.org/ns/credentials/v2"
  ],
  "credentialSchema": {
    "id": "http://127.0.0.1:8090/tas/api/v1/vc-schema?name=certificate",
    "type": "OsdSchemaCredential"
  },
  "credentialSubject": {
    "claims": [
      {
        "caption": "subject",
        "code": "org.opendid.v1.subject",
        "format": "plain",
        "hideValue": false,
        "type": "text",
        "value": "o=Verifier"
      },
      {
        "caption": "role",
        "code": "org.opendid.v1.role",
        "format": "plain",
        "hideValue": false,
        "type": "text",
        "value": "Verifier"
      }
    ],
    "id": "did:omn:verifier"
  },
  "encoding": "UTF-8",
  "evidence": [
    {
      "attribute": {
        "licenseNumber": "1234567890"
      },
      "documentPresence": "Physical",
      "evidenceDocument": "BusinessLicense",
      "subjectPresence": "Physical",
      "type": "DocumentVerification",
      "verifier": "did:omn:tas"
    }
  ],
  "formatVersion": "1.0",
  "id": "0815ebc5-7264-45cc-8c6c-4db17640a4b7",
  "issuanceDate": "2024-01-01T09:50:19Z",
  "issuer": {
    "id": "did:omn:tas",
    "name": "raonsecure"
  },
  "language": "ko",
  "proof": {
    "created": "2024-01-01T09:50:19Z",
    "proofPurpose": "assertionMethod",
    "proofValue": "mH8dkYyG51tSSLqrQxmdXTh...",
    "proofValueList": [
      "mIIvBGv2JJk6XSmXQnJIMU...",
      "mH58hKzV3+OI98K2P4n6Hq..."
    ],
    "type": "Secp256r1Signature2018",
    "verificationMethod": "did:omn:tas?versionId=1#assert"
  },
  "type": [
    "VerifiableCredential",
    "CertificateVC"
  ],
  "validFrom": "2024-01-01T09:50:19Z",
  "validUntil": "2025-01-01T09:50:19Z"
}