ЦЗ Цахим Засаг
GitHub Нэвтрэх

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-ийн нэвтрэлт мөн ажиллах уу» гэсэн асуулт.

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 дээр нэвтэрч, буцаж ирээд сесстэй болсон эсэх.