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 зөвшөөрөх
Аппын хостыг провайдерийн .env дэх OAUTH_REDIRECT_HOSTS-д нэмнэ.
Энэ жагсаалт дэд домэйныг өвлүүлдэггүй. dgov.mn бичсэн нь
open.dgov.mn-ийг зөвшөөрөхгүй; хост бүр яг таг бичигдэнэ. Одоогийн утга:
OAUTH_REDIRECT_HOSTS=open.dgov.mn
Мартвал шинж тэмдэг нь: нэвтрэлт эхэлж, нууц үг зөв, буцах агшинд провайдер
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-ууд-д.
Шалгах
# 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 дээр нэвтэрч, буцаж ирээд сесстэй болсон эсэх.