Апп холбох (RP)¶
Энэ хуудас хоёр чиглэлийг тайлбарлана:
- Gerege App нь client —
sso.gerege.mn-ээр дамжин нэвтрэх (RP тал). - Гуравдагч апп нь client — Gerege App-ийн өөрийн OIDC provider-т холбогдох.
A. Gerege App-ыг Gerege SSO-д холбох¶
Production дээр Gerege App нь sso.gerege.mn дээр confidential client-ээр
бүртгэгдсэн.
| Тохиргоо | Утга |
|---|---|
client_id |
gerege-app-mn |
| redirect URI | https://geregeapp.mn/sso/callback |
| post-logout | https://geregeapp.mn/ |
| scopes | openid profile email |
| grant types | authorization_code, refresh_token |
Env тохиргоо (backend.env):
SSO_ISSUER=https://sso.gerege.mn
SSO_CLIENT_ID=gerege-app-mn
SSO_CLIENT_SECRET=<нууц>
SSO_REDIRECT_URI=https://geregeapp.mn/sso/callback
SSO_SCOPE=openid profile email
Урсгал:
- Хэрэглэгч «Gerege SSO-оор нэвтрэх» дарна →
/api/auth/sso/start. - Backend
POST /v1/sso/startнь state үүсгэж (SSO_STATE_KEY-ээр HMAC),sso.gerege.mn/oauth2/authруу authorize URL байгуулна. - Хэрэглэгч SSO дээр eID-ээр нэвтэрнэ.
- SSO нь
…/sso/callback?code&stateруу буцаана. - Backend
POST /v1/sso/callbackнь code-ийг токен болгож солиод, иргэнийгsso_sub-ээр upsert хийж, апп-ын өөрийн session (JWT) олгоно.
| Endpoint | Юу |
|---|---|
POST /v1/sso/start |
Authorize URL байгуулах |
POST /v1/sso/callback |
Code → токен, дотоод session |
POST /v1/sso/native |
Мобайл (PKCE, public client) урсгал |
POST /v1/sso/logout |
RP-initiated logout |
Logout: sso.gerege.mn/oauth2/sessions/logout руу id_token_hint +
post_logout_redirect_uri-тай шилжинэ.
Post-logout redirect бүртгэл
Апп-ыг зөвхөн login redirect-тэй бүртгэвэл logout нь "post_logout_redirect_uri is not whitelisted" алдаа өгнө. Login ба post-logout URI хоёуланг нэг дор бүртгэ.
invalid_client гарвал
SSO_CLIENT_ID нь provider-ийн client санд байхгүй, эсвэл redirect URI яг
таарахгүй байна. Хоёуланг нь шалга.
B. Гуравдагч аппыг Gerege App-д холбох¶
Gerege App-ийн OIDC provider асаалттай үед (OAUTH_ISSUER тохируулагдсан)
гуравдагч апп-ууд түүгээр нэвтэрч чадна.
1. Client бүртгүүлэх¶
Admin → Applications → Шинэ апп: нэр, redirect URI, tag оруулж хадгална.
Хэрэгтэй gateway service-үүдийг (eid-proxy г.м.) checkbox-оор олгоно.
client_id + client_secret буцна.
curl -X POST https://<issuer>/admin/api/v1/clients \
-H 'Authorization: Bearer gsk_…' \
-H 'Content-Type: application/json' \
-d '{
"client_id": "myapp",
"client_name": "Миний апп",
"redirect_uris": ["https://myapp.mn/sso/callback"],
"post_logout_redirect_uris": ["https://myapp.mn/"],
"grant_types": ["authorization_code", "refresh_token"],
"scope": "openid profile email"
}'
2. Урсгалыг хэрэгжүүлэх¶
GET https://<issuer>/.well-known/openid-configuration ← эндээс бүх зам
GET https://<issuer>/oauth2/auth?…&code_challenge_method=S256
POST https://<issuer>/oauth2/token
GET https://<issuer>/userinfo
Заавал: PKCE S256. plain дэмжигдэхгүй. Public client (мобайл, SPA) нь
token_endpoint_auth_method: none-ээр бүртгэгдэж, PKCE-ээр хамгаалагдана.
3. Нэмэлт service олгох¶
Нэвтрэлт нь бүх бүртгэгдсэн апп-д base scope (openid profile email)-оор
автоматаар үйлчилнэ. Харин нэмэлт service-үүд (eID proxy г.м.) per-app
зөвшөөрөл шаардана — олголт нь client-ийн allowed scope дахь service scope
(svc:eid-proxy гэх мэт)-ээр илэрхийлэгдэнэ.
Admin → Applications → тухайн апп → service-ийг тэмдэглэ → Хадгал.
Дэлгэрэнгүйг eID Service Proxy болон API Gateway-аас үз.
Түгээмэл алдаа¶
| Алдаа | Шалтгаан | Засвар |
|---|---|---|
invalid_client |
client_id бүртгэлгүй / redirect URI зөрсөн | Бүртгэлээ шалга |
invalid_grant |
Code хугацаа дууссан, эсвэл code_verifier таарахгүй |
PKCE-ээ шалга |
post_logout_redirect_uri is not whitelisted |
Logout URI бүртгэгдээгүй | Client-д нэм |
403 service дуудахад |
Апп-д service олгогдоогүй | Admin-аас олго |
503 service дуудахад |
Gateway дээр service унтраалттай | Admin → Gateway |