SSO sayfaları
SSO akışına dahil her UI yüzeyi. Zihinsel model için Kimlik ve SSO; kurulum için Admin → Global SSO yapılandır veya Admin → Org bazlı SSO yapılandır.
/login — seçici
Anonim kullanıcılar buraya düşer. Sayfa nasıl giriş yapılacağını sorar.
| Eleman | Davranış |
|---|---|
| Email + password formu | Local-password yolu. require_sso=true bloklamadıkça mevcut. |
| Sign in with SSO butonu | Realm seçici dialog'unu açar (aşağıda) |
| Register linki | Yalnızca public registration etkin ve lisans yeni kullanıcı izin veriyorsa görünür |
Sayfa baştan org'a özgü SSO butonları göstermez — bunlar sonraki adımın sorduğu realm slug'ı gerektirir.
/login realm seçici (modal)
Sign in with SSO tıkla → küçük dialog:
| Field | Notlar |
|---|---|
| Organization realm | Org slug'ınızı yazın (örn. acme). Global SSO için boş bırakın. |
| Continue butonu | Slug ile /api/auth/discovery'ye POST atar |
Discovery yanıtı sonraki adımı şekillendirir:
oidcbutonu → org'un IdP'si bulundu, tıklayıp redirect'i başlatoidc (global)→ org bazlı IdP yok, global'e düşülüyorlocalbutonu → hiç SSO yok, password'e dönüyorsunuz- Hiç buton yok → "No SSO provider for that realm" hatası (slug yok VEYA var ama SSO'su yok ve global de yapılandırılmamış)
/sso — başlangıç
URL: /sso?slug=<org-slug>&redirect=<post-login-path>
Bu route kısa ömürlü. Tarayıcı buna gelir, backend şifreli state
token üretir, sizi IdP'nin authorization URL'sine redirect eder.
Normal akışta bu sayfayı görmemeniz lazım — server-side bounce.
GÖRÜRSENİZ (boş ekran, redirect yok): SSO config'in issuer URL'i bozuk veya discovery çağrısı fail oldu. Backend log'larını kontrol edin.
IdP redirect
Tarayıcınız artık IdP'de (Auth0, Keycloak, Okta, Azure AD, …). dtedge UI'nin burada görünürlüğü yok. IdP'nin istediği şekilde kimlik doğrularsınız — password, MFA, hardware token, ne ise.
Başarıda IdP sizi /sso/callback?code=...&state=...'a redirect
eder.
/sso/callback — server-side
/sso gibi kısa ömürlü. Backend:
statedecode eder, freshness doğrular (10 dk pencere)code'u ID + access token'larla takas eder- ID token imzasını IdP'nin JWKS'ine karşı doğrular
nonce'unstate'e koyduğumuzla eşleştiğini doğrular- Claim'leri (email, name, sub, groups) çıkarır
- Kullanıcıyı link / provision eder
- Group mapping'den rolleri reconcile eder (yapılandırılmışsa)
- Bir dtedge JWT issue eder
/sso/finish?token=<jwt>'e redirect eder
/sso/finish — token landing
Taze basılmış dtedge JWT'sini alan sayfa. Token'ı localStorage'a
saklar ve orijinal destination'a (veya default /'a) redirect
eder.
Normal akışta bu sayfayı bir saniyenin kesirinde görürsünüz. Takılı görürseniz JavaScript veya storage devre dışı olabilir.
/sso/error — başarısızlık landing
SSO başarısızlıklarının düştüğü yer. URL sorgu paramı olarak hata kodu taşır:
| Kod | Anlam |
|---|---|
INVALID_STATE | State token eksik, expire olmuş veya tamper edilmiş. Tekrar dene. |
STATE_EXPIRED | State token 10 dakikadan eskidi (IdP login sayfasında uzun oturdunuz). Tekrar dene. |
NONCE_MISMATCH | ID token nonce'u gönderdiğimizle eşleşmiyor. Tamper veya bayat tarayıcı sekmesi. |
ID_TOKEN_INVALID | IdP malformed token döndü. IdP tarafını kontrol et. |
PROVIDER_GONE | Login'i başlatmanızla geri gelmeniz arasında SSO config silindi. Admin sorunu. |
EMAIL_CLAIM_MISSING | IdP email claim göndermedi. IdP scope'unu düzelt. |
NOT_PROVISIONED | Auto-provision kapalı ve siz henüz dtedge'de yoksunuz. Admin önce davet etmeli. |
LINK_FAILED | Identity link sırasında internal failure. Backend log'unda detay. |
Organizations → <org> → SSO sekmesi
Org admin'in org bazlı SSO config sayfası. Form:
| Bölüm | Field'lar |
|---|---|
| Provider | Issuer URL, Client ID, Client secret |
| Scopes + claim'ler | Scopes (boşlukla ayrılmış), Claim mappings (email/name/groups) |
| Provisioning | Auto-provision toggle, Default role dropdown |
| Group → role mapping | Add row (IdP grup adı → org role dropdown) |
| Policy | Require SSO toggle |
| URI'ler | Redirect URI, Back-Channel Logout URI, Post-Logout Redirect URI (read-only; IdP app config'ine yapıştırmak için) |
| Actions | Save / Remove |
Her save PingIssuer (discovery URL yanıt vermeli) çalıştırır ve
her mapping satırının role'ünün var olduğunu doğrular.
Admin → Settings → Global SSO
Super-admin'in install-wide SSO'su. Org bazlı ile aynı shape, artı:
| Bölüm | Field'lar |
|---|---|
| Org-rol atamaları | (IdP grubu, org, role) satır grid'i; role dropdown seçilen org'un rolleriyle filtrelenir |
Default role field'ı bu yüzeyde gizlidir (global SSO için daha az anlamlı — org-rol atama grid'i genelde rolü yerleştirir).