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

Апп холбох (RP)

Энэ хуудас хоёр чиглэлийг тайлбарлана:

  1. Gerege App нь clientsso.gerege.mn-ээр дамжин нэвтрэх (RP тал).
  2. Гуравдагч апп нь 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

Урсгал:

  1. Хэрэглэгч «Gerege SSO-оор нэвтрэх» дарна → /api/auth/sso/start.
  2. Backend POST /v1/sso/start нь state үүсгэж (SSO_STATE_KEY-ээр HMAC), sso.gerege.mn/oauth2/auth руу authorize URL байгуулна.
  3. Хэрэглэгч SSO дээр eID-ээр нэвтэрнэ.
  4. SSO нь …/sso/callback?code&state руу буцаана.
  5. 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