SSO-д холбогдох
Шинэ апп sso.dgov.mn-ээр хүн таниулах гэж байвал энэ хуудас. Гурван алхам:
клиент бүртгүүлэх, redirect host зөвшөөрөх, аппаа тохируулах.
Провайдер юу зарлаж байна
https://sso.dgov.mn/.well-known/openid-configuration
issuer |
https://sso.dgov.mn |
authorization_endpoint |
https://sso.dgov.mn/oauth2/auth |
token_endpoint |
https://sso.dgov.mn/oauth2/token |
end_session_endpoint |
https://sso.dgov.mn/oauth2/logout |
introspection_endpoint |
https://sso.dgov.mn/oauth2/introspect |
revocation_endpoint |
https://sso.dgov.mn/oauth2/revoke |
jwks_uri |
https://sso.dgov.mn/.well-known/jwks.json |
response_types_supported |
code |
grant_types_supported |
authorization_code, refresh_token, client_credentials |
code_challenge_methods_supported |
S256 |
id_token_signing_alg_values_supported |
RS256 |
scopes_supported |
openid, profile, email, phone, offline_access, erp.read, erp.write |
claims_supported |
iss, sub, aud, exp, iat, nonce, auth_time, email, email_verified, name, tenant_id |
implicit ба password grant зарлагдаагүй. Хэрэв тэдгээрийг хайж байгаа бол
холболтын загвараа өөрчил, провайдерийг биш.
tenant_id claim нь энэ экосистемийн онцлог: хүн зөвхөн хэн бэ гэдгээрээ биш,
аль байгууллагын хүн бэ гэдгээрээ ирнэ.
1. Клиент бүртгүүлэх
sso-clients аппаар, эсвэл API-аар:
POST /api/v1/sso-clients/apps
client_id-г гараар сонгодоггүй: handleCreateApp нь app_ + нэрний slug +
санамсаргүй найм гэж өөрөө гаргана (жишээ нь app_opendgovmn_28426259). Нууцыг
үүсгэсэн тэр нэг хариунд л буцаана — сан digest хадгалдаг тул алдвал
rotate-secret, сэргээх зам байхгүй.
Бүртгэлд заах зүйлс:
| Талбар | Утга |
|---|---|
redirect_uris |
Аппын callback хаяг, бүтнээр нь |
post_logout_redirect_uris |
Гарсны дараа хаашаа |
grant_types |
authorization_code |
scopes |
openid profile email |
client_type |
confidential (нууц хадгалж чадах сервер талтай бол) |
2. Redirect host зөвшөөрөх {#хостын-жагсаалт}
Аппын хостыг провайдерийн OAUTH_REDIRECT_HOSTS жагсаалтад нэмнэ. Тэр мөр нь
sso-dgov-mn-ийн deploy/docker-compose.yml
дотор — серверийн .env дотор биш: аль системүүд энэ нэвтрэлтээр ордог вэ
гэдэг нь нууц биш, бүртгэл бөгөөд түүхтэйгээ хамт репод байх ёстой. Нэмээд
push хийхэд роллаут өөрөө явна.
Энэ жагсаалт дэд домэйныг өвлүүлдэггүй. dgov.mn бичсэн нь
open.dgov.mn-ийг зөвшөөрөхгүй; хост бүр яг таг бичигдэнэ. Одоогийн утга:
OAUTH_REDIRECT_HOSTS: ${OAUTH_REDIRECT_HOSTS:-open.dgov.mn,fuelnet.dgov.mn}
Мартвал шинж тэмдэг нь хоёр: консол дээр клиент бүртгэхэд «redirect URI host
is not allowed» гэж татгалзана, эсвэл (аль хэдийн бүртгэгдсэн бол) нэвтрэлт
эхэлж, нууц үг зөв, буцах агшинд провайдер redirect-ийг татгалзана. Бүртгэлийн redirect_uris зөв байсан ч энэ жагсаалт
тусдаа шалгагддаг — хоёр газарт бичигдэх нь давхардал биш: нэг нь клиентийн
зарласан зүйл, нөгөө нь суулгацын зөвшөөрсөн зүйл.
3. Аппаа тохируулах
Gerege Nexus дээр суурилсан апп бол дөрвөн мөр:
SSO_CLIENT_ISSUER=https://sso.dgov.mn
SSO_CLIENT_ID=app_…
SSO_CLIENT_SECRET=… # хоосон бол public клиент, PKCE дангаараа барина
SSO_CLIENT_TENANT=dgov # хоосон бол танихгүй хүнийг татгалзана
Callback нь цөмийн өгөгдмөл зам: /api/v1/auth/sso/callback.
Өөр стектэй апп бол ердийн OIDC: authorization_code + PKCE (S256), state
ба nonce заавал, id_token-ыг jwks_uri-аас авсан түлхүүрээр шалгах, iss
ба aud-ыг харьцуулах.
SSO_CLIENT_LOCAL_LOGIN
Клиент тал дээрх энэ тохируулга нь «эндэх нууц үг, eID-ийн нэвтрэлт мөн ажиллах уу» гэсэн асуулт.
true— провайдер унасан ч хүн орж чадна. Провайдер босч амжаагүй үед л.false— провайдер л цорын ганц зам.
open.dgov.mn дээр 2026-08-17-ноос false. Энэ нь аюулгүй байдлын хувьд зөв —
нэг л газар нууц үг шалгагдана — гэхдээ sso.dgov.mn унавал шинэ нэвтрэлт
бүхэлдээ зогсоно гэсэн үг. Буцах зам
Runbook-ууд-д.
Иргэн юу хардаг вэ
Клиент анх хандахад sso.dgov.mn/oauth/consent дэлгэц гарч, аль scope-ыг
өгөхийг хүний хэлээр жагсаана — openid нь «Таныг нэвтрүүлж, хэн болохыг
баталгаажуулна», erp.read нь эмзэг гэж тэмдэглэгдэнэ. Иргэн зөвшөөрсний
дараа тэр шийдвэр хадгалагдаж, дараагийн удаа асуухгүй; клиент илүү өргөн
scope хүсэх өдөр л дахин асууна.
Шалгах
# discovery ирж байна уу
curl -s https://sso.dgov.mn/.well-known/openid-configuration | jq .issuer
# түлхүүрүүд ирж байна уу
curl -s https://sso.dgov.mn/.well-known/jwks.json | jq '.keys | length'
Хөтчөөр бүтэн урсгалыг өнгөрөөх нь эцсийн шалгалт: клиентээс эхэлж,
sso.dgov.mn дээр нэвтэрч, буцаж ирээд сесстэй болсон эсэх.