ХӨГЖҮҮЛЭГЧИЙН ГАРЫН АВЛАГА
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/json3Нэвтрэлт (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",
"signatureProtocolParameters": {
"rpChallenge": "'"$(openssl rand -base64 64 | tr -d '\n')"'",
"signatureAlgorithm": "rsassa-pss",
"signatureAlgorithmParameters": {"hashAlgorithm": "SHA-512"}
},
"interactions": "'"$(echo -n '[{"type":"displayTextAndPIN","displayText60":"Хаан Банк-д нэвтрэх"}]' | base64 | tr -d '\n')"'"
}'
# Хариу: {"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": "RAW_DIGEST_SIGNATURE",
"signatureProtocolParameters": {
"digest": "'"$DIGEST"'",
"signatureAlgorithm": "rsassa-pss",
"signatureAlgorithmParameters": {"hashAlgorithm": "SHA-256"}
},
"interactions": "'"$(echo -n '[{"type":"displayTextAndPIN","displayText60":"Гэрээнд гарын үсэг зурах"}]' | base64 | tr -d '\n')"'"
}'
# Хариу: {"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 |
Аюулгүй байдлын зөвлөмж
- Secret-ийг зөвхөн backend-д хадгална — браузер/гар утсанд хэзээ ч задлахгүй.
- IP allowlist тохируулбал secret хулгайлагдсан ч зөвхөн танай IP-ээс ажиллана.
- id (РД/civil_id)-ийг РД, иргэний дугаар эсвэл ETSI хэлбэрээр илгээж болно — сервер таьна.
- eIDAS qualified орчинд нэмэлт mTLS client cert тохируулж болно (admin → RP → mTLS subject).
- Push ирэхгүй ч иргэн app-аа нээхэд хүсэлт гарч ирнэ (poll fallback) — push-аас бүрэн хамаарахгүй.