Нийтлэг зарчим¶
Экосистемийн бүх репо-д давтагдан хэрэгждэг де-факто стандартууд. Эдгээр нь албан ёсны тодорхойлолтоос гарсан биш — бодит асуудлыг олон удаа шийдсэний дараа тогтсон дүрмүүд. Шинэ платформ нэмэхдээ эдгээрийг эхнээс нь сахина.
Identity casing¶
Дүрэм: Өгөгдлийн санд бүх identity текстийг жижиг үсгээр хадгална. Хайлт нь том/жижиг үсэг ялгахгүй. Харуулахдаа стандартаар хөрвүүлнэ (регистрийн дугаар том үсгээр, нэр Title Case).
Чөлөөлөгдөх талбарууд — эдгээрийг байгаагаар нь хадгална:
| Талбар | Яагаад |
|---|---|
etsi_identifier |
Стандартаар тодорхойлогдсон формат |
| Гэрчилгээний DN | Крипто гарын үсэгт орсон, өөрчилж болохгүй |
*_latin талбарууд |
Латин галиг — эх хэлбэрээ хадгална |
document_number |
Албан ёсны баримтын дугаар |
| Hash утгууд | Бит бүр ач холбогдолтой |
Яагаад энэ дүрэм үүссэн бэ?
Нэг иргэн АБ12345678 гэж бүртгүүлээд дараа нь аб12345678 гэж нэвтрэхийг
оролдоход өөр хүн гэж үзэгдэж, давхардсан данс үүсдэг байсан. Casing-ийг
хадгалалтын түвшинд нэгтгэснээр энэ анги алдаа бүхэлдээ арилдаг.
Эрхийн шатлал¶
Хатуу дүрэм:
| Роль | Юу хийж чадах | Юу хийж ЧАДАХГҮЙ |
|---|---|---|
superadmin |
Admin данс нэмэх/устгах | — |
admin |
Manager эрх олгох | Admin данс удирдах |
manager |
Өдөр тутмын үйл ажиллагаа | Хүн нэмэх |
user |
Өөрийн үйлдэл | Эрх олгох |
Super admin нь MFA-тай, тусдаа данс. Onboarding wizard-аар үүснэ: invite allow-list → Google → eID → и-мэйл OTP → TOTP + сэргээх код. Тусдаа хүснэгтэд Google identity-гээр түлхүүрлэгдэн хадгалагдана.
Үүний практик утга: нэг хүн eID админ ба Google super admin хоёулаа байж чадна — хоёр өөр данс, хоёр өөр нэвтрэлт. Super admin-ийн бүх нэвтрэлт MFA-гаар хамгаалагдана.
Admin эрхийг регистрийн дугаараар, локал eID-д бүртгэлтэй хэрэглэгчийн эсрэг олгоно.
Гарын үсгээр баталгаажуулсан эрх олголт¶
Дүрэм: Байгууллагад manager эрх нэмэхэд тухайн хүн рүү eID SIGN push очиж,
PIN2-оор зөвшөөрсний дараа л эрх ACTIVE болно.
Яагаад: эрх олголт нь хууль зүйн үр дагавартай үйлдэл. Админ дангаараа хэн нэгнийг удирдагч болгосныг тэр хүн дараа нь үгүйсгэж болно. PIN2 гарын үсэг нь non-repudiation — «би зөвшөөрөөгүй» гэж хэлэх боломжийг хаана.
Callback дүрэм¶
Дүрэм: Callback нь зөвхөн same-device урсгалд буцна. Бусад тохиолдолд session-ийг poll хийнэ.
| Нөхцөл | Механизм |
|---|---|
| Хэрэглэгч нэг төхөөрөмж дээр (deep-link) | Callback |
| QR код — өөр төхөөрөмж | Session poll (long-poll) |
| Push мэдэгдэл | Session poll |
Учир нь: өөр төхөөрөмж дээр эхэлсэн урсгалд callback хаашаа буцахаа мэдэхгүй. Poll нь эхлүүлсэн browser-ийг эх сурвалж болгож, урсгалыг тодорхой байлгана.
3 дагч талын deep-link — callback параметрээр дамжуулж, дуусахад тухайн апп-ыг идэвхжүүлнэ.
Google холболт¶
Дүрэм: Google данс холбохын өмнө заавал eID-ээр баталгаажина. Эхний удаа холбоход бодит хүнтэй уяна; дараагийн удаа шууд Google-ээр нэвтэрч болно. Салгах боломжтой.
Учир нь: Google данс нь хэн ч үүсгэж болох зүйл. Түүнийг өөрөө дангаар нь иргэний танилт болгон хүлээн авах боломжгүй. eID-ээр нэг удаа уясны дараа тэр Google данс нь тодорхой иргэнийг заана.
RP ↔ rp_app¶
Дүрэм: eID дээр зөвхөн RP бүртгэнэ. Нэг RP
доорх олон апп/дэд системийг rp_app / rp_app_url талбараар дамжуулна.
Ингэснээр лог болон хэрэглэгчийн дэлгэц дээр аль апп хүсэлт гаргасан нь харагдана — гэхдээ апп бүрт тусдаа RP бүртгүүлэх, тус бүрт credential тараах шаардлагагүй.
Logout нь эхлүүлсэн домэйн дээрээ дуусна¶
Дүрэм: Хэрэглэгч гарахад эхлүүлсэн домэйн руугаа буцна — SSO-гийн /login
руу шидэгдэхгүй.
Яагаад: хэрэглэгч RP-ийн апп дээр байсан. Гарсныхаа дараа огт танихгүй домэйны нэвтрэх дэлгэц дээр очих нь төөрөгдөл үүсгэдэг. Гарах нь тухайн апп-ын хүрээнд дуусах ёстой.
Credential нэг эх сурвалжтай¶
Дүрэм: OAuth client болон client secret нь зөвхөн SSO дээр үүснэ, зөвхөн тэнд амьдарна. Өөр систем түүнийг үүсгэхгүй, хадгалахгүй, харуулахгүй.
Developer Portal нь энэ дүрмийн шалгуур жишээ: тэр нь апп бүртгэлийн заавар өгдөг ч client үүсгэдэггүй, зөвхөн SSO консол руу гүн холбоос хийнэ.
Баримт = код¶
Дүрэм: Репо бүр өөрийн docs/ хавтастай, MkDocs сайттай. Баримт нь кодтой нэг
репо-д, нэг PR-д хамт өөрчлөгддөг.
Хамрах хэл: MN + EN дор хаяж; гол репо-нуудад ZH · RU нэмэгддэг. Дэлгэрэнгүйг Олон хэл хуудаснаас үзнэ үү.
Clean Architecture — back-import байхгүй¶
Дүрэм: handler → usecase → repository → domain. Хамаарал зөвхөн нэг чиглэлд.
Бизнес цөм (domain, usecase) нь web framework-ийг хэзээ ч import хийхгүй.
Шалгах хялбар арга: domain/ доторх файлуудад net/http эсвэл chi import байвал
дүрэм зөрчигдсөн.
Шинэ платформ нэмэх шалгах жагсаалт¶
- [ ] Танилт нь SSO-гийн OIDC RP-ээр — өөрийн нууц үгийн систем байхгүй
- [ ] Эрхийн шатлал
superadmin → admin → manager → user - [ ] Identity текст DB-д жижиг үсгээр, чөлөөлөгдөх талбарууд тодорхойлогдсон
- [ ] Postgres RLS идэвхтэй + boot-time enforceability guard
- [ ] Audit log — hash-chain холбоост
- [ ] Security header, CORS allow-list, rate limit тохируулагдсан
- [ ]
/metrics,/swaggerproduction-д хаалттай - [ ]
docs/+ MkDocs сайт, MN/EN - [ ] CI: build + тест + баримтын strict шалгалт