eID MongoliaeID Mongolia

ХӨГЖҮҮЛЭГЧИЙН ГАРЫН АВЛАГА

RP интеграц — иргэнээр нэвтрэлт ба гарын үсэг

Холбогдогч тал (Relying Party — банк, төр, e-үйлчилгээ) eID Mongolia-д холбогдож, иргэнээр утсаар нь нэвтрэлт (authentication) эсвэл хууль ёсны гарын үсэг (signature) хийлгэх 5 алхам. Бүх дуудлага HTTPS дээр, RP-API нь https://eidmongolia.mn/v3.

1RP бүртгүүлж API secret авах

Өргөдлийн форм бөглөнө — оператор шалгаж баталсны дараа RP бүртгэгдэж, API secret олгогдоно. Формд:

  • Нэр — танай үйлчилгээний нэр (иргэнд харагдана, ж: «Хаан Банк»)
  • ЗорилгоAUTH / SIGN / CERT (хэрэгцээгээрээ)
  • App2App буцах host (сонголт) — гар утаснаас иргэнийг буцаах домэйн
  • mTLS cert subject (сонголт) — production-д client cert шаардана

Өргөдөл өөрөө ямар ч эрх үүсгэхгүй. Батлагдсаны дараа UUID ба API secret (rp_sk_…) олгогдоно. Secret зөвхөн нэг удаа харагдана — даруй найдвартай хадгалаарай (танай backend-д л, нууцаар). IP allowlist-ыг оператор батлахдаа тохируулна.

# API-аар шууд бас илгээж болно:
curl -X POST https://eidmongolia.mn/v3/rp-applications \
  -H "Content-Type: application/json" \
  -d '{"orgName":"Хаан Банк","orgRegister":"9999999",
       "contactName":"Б. Бат","contactEmail":"bat@khanbank.mn",
       "purpose":"AUTH,SIGN"}'
# → 202 {"id":"<uuid>","status":"PENDING"}   төлөв: GET /v3/rp-applications/<uuid>

2Дуудлага бүрийг secret-ээр баталгаажуулах

RP-API дуудлага бүрд Authorization: Bearer <secret> header илгээнэ. Secret-гүй эсвэл буруу бол 401 буцна. IP allowlist тохируулсан бол зөвшөөрөгдөөгүй IP-ээс 403.

Authorization: Bearer rp_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

3Нэвтрэлт (authentication) эхлүүлэх

Иргэнийг РД, иргэний дугаар эсвэл ETSI-ээр заана (аль нь ч болно — сервер таьна). Иргэний утас руу push очно.

curl -X POST https://eidmongolia.mn/v3/authentication/notification/etsi/<РД-эсвэл-civil_id> \
  -H "Authorization: Bearer $RP_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "relyingPartyUUID": "<танай-UUID>",
    "relyingPartyName": "Хаан Банк",
    "certificateLevel": "QUALIFIED",
    "signatureProtocol": "ACSP_V2",
    "interactions": [
      {"type":"displayTextAndPIN","displayText60":"Хаан Банк-д нэвтрэх"}
    ]
  }'

# Хариу: {"sessionID":"...","vc":{"type":"alphaNumeric5","value":"12345"}}
# vc.value — иргэний утсан дээр харагдах 5 оронтой баталгаажуулах код (VC). UI-даа ХАРУУЛНА.
# VC нь ПИН БИШ — зөвхөн нүдээр тулгах зориулалттай, хэрэглэгчээр оруулуулж БОЛОХГҮЙ
# (PIN1 нь 4 оронтой; VC 5 орон нь андуурч PIN блок болохоос сэргийлсэн зориудын ялгаа).

4Гарын үсэг (signature) эхлүүлэх

Баримтын SHA-256 digest (base64)-ийг илгээнэ. Иргэн PIN2-оор хууль ёсны (non-repudiation) гарын үсэг зурна.

# 1) Баримтын digest
DIGEST=$(printf '%s' "Зээлийн гэрээ №42" | openssl dgst -sha256 -binary | base64)

# 2) Sign session
curl -X POST https://eidmongolia.mn/v3/signature/notification/etsi/<РД-эсвэл-civil_id> \
  -H "Authorization: Bearer $RP_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "relyingPartyUUID": "<танай-UUID>",
    "relyingPartyName": "Хаан Банк",
    "certificateLevel": "QUALIFIED",
    "signatureProtocol": "ACSP_V2",
    "digest": "'"$DIGEST"'",
    "hashType": "SHA256",
    "interactions": [
      {"type":"displayTextAndPIN","displayText60":"Гэрээнд гарын үсэг зурах"}
    ]
  }'

# Хариу: {"sessionID":"...","vc":{"type":"alphaNumeric5","value":"56789"}}

5Үр дүнг хүлээх (session poll)

sessionID-аар session-ийн төлвийг асууна. Long-poll — иргэн баталгаажуулмагц (эсвэл timeoutMs дуустал) шууд буцна.

curl "https://eidmongolia.mn/v3/session/<sessionID>?timeoutMs=30000" \
  -H "Authorization: Bearer $RP_SECRET"

# COMPLETE болоход:
# {
#   "state": "COMPLETE",
#   "result": { "endResult": "OK", "documentNumber": "..." },
#   "signature": { "value": "MEQCI…", "signatureAlgorithm": "ecdsa-with-SHA256" },
#   "cert": { "value": "MIID…" }   // иргэний X.509 гэрчилгээ (subject-д РД, нэр)
# }

endResult: OK бол амжилттай. signature.value нь баримтын гарын үсэг, cert.value нь иргэнийг таних гэрчилгээ (eIDAS qualified).


Endpoint-ийн товч жагсаалт

ЗорилгоEndpoint
Нэвтрэлт (push)POST /v3/authentication/notification/etsi/{id}
Гарын үсэг (push)POST /v3/signature/notification/etsi/{id}
Гэрчилгээ авахPOST /v3/signature/certificate/{documentNumber}
Session төлөвGET /v3/session/{sessionID}?timeoutMs=30000

Аюулгүй байдлын зөвлөмж

Тусламж хэрэгтэй юу? Дэмжлэгийн баг эсвэл амьд demo үзээрэй.