Агуулгыг алгасах

Нийтлэг зарчим

Экосистемийн бүх репо-д давтагдан хэрэгждэг де-факто стандартууд. Эдгээр нь албан ёсны тодорхойлолтоос гарсан биш — бодит асуудлыг олон удаа шийдсэний дараа тогтсон дүрмүүд. Шинэ платформ нэмэхдээ эдгээрийг эхнээс нь сахина.

Identity casing

Дүрэм: Өгөгдлийн санд бүх identity текстийг жижиг үсгээр хадгална. Хайлт нь том/жижиг үсэг ялгахгүй. Харуулахдаа стандартаар хөрвүүлнэ (регистрийн дугаар том үсгээр, нэр Title Case).

Чөлөөлөгдөх талбарууд — эдгээрийг байгаагаар нь хадгална:

Талбар Яагаад
etsi_identifier Стандартаар тодорхойлогдсон формат
Гэрчилгээний DN Крипто гарын үсэгт орсон, өөрчилж болохгүй
*_latin талбарууд Латин галиг — эх хэлбэрээ хадгална
document_number Албан ёсны баримтын дугаар
Hash утгууд Бит бүр ач холбогдолтой

Яагаад энэ дүрэм үүссэн бэ?

Нэг иргэн АБ12345678 гэж бүртгүүлээд дараа нь аб12345678 гэж нэвтрэхийг оролдоход өөр хүн гэж үзэгдэж, давхардсан данс үүсдэг байсан. Casing-ийг хадгалалтын түвшинд нэгтгэснээр энэ анги алдаа бүхэлдээ арилдаг.

Эрхийн шатлал

superadmin (1) → admin (2) → manager (3) → user (4)

Хатуу дүрэм:

Роль Юу хийж чадах Юу хийж ЧАДАХГҮЙ
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, /swagger production-д хаалттай
  • [ ] docs/ + MkDocs сайт, MN/EN
  • [ ] CI: build + тест + баримтын strict шалгалт