WEB / WEB-15.03
Modern login yolculuğu
Atlas’ın server-side login profilinde browser redirect, RP session ve downstream API yetkisini uçtan uca karar sahipleriyle izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Kendi notu
- Token sonrası başlangıç
Scene token response RP’deyken başlar; browser redirects ve code exchange ledger’da açıklanır.
- Browser
- Local session yok
- Atlas · RP server
- ID+AT aliases held; gate pending
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP ID validation
RP seçili issuer/audience/time/key/nonce gate’lerini değerlendirir; henüz browser session alias’ı yoktur.
- Browser
- Local session yok
- Atlas · RP server
- ID accepted; iss/sub bound; no session
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- Local session üret
RP yeni identifier ve local lifetime ile session oluşturur; OP state’ini veya API policy’yi değiştirmez.
- Browser
- Local session yok
- Atlas · RP server
- New local session ready; expires=2000
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- Browser response aldı
RP’nin session response’u browser’a ulaştı. Browser seçili session alias’ını aldı ve notlarını açmak için sonraki application request’ini bu alias ile hazırladı; henüz API request’i veya API verisi yoktur.
- Browser
- Session alias alındı; note request hazır; API verisi yok
- Atlas · RP server
- New local session ready; expires=2000
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP normal request aldı
Browser’ın normal note request’i RP’ye ulaştı; session alias receipt’i lookup sonucu değildir.
- Browser
- Session alias held; no API data
- Atlas · RP server
- App request received; session pending
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP session gate
Local lookup time ve invalidation koşulları geçti; RP seçili API credential ve action’ı hazırladı.
- Browser
- Session alias held; no API data
- Atlas · RP server
- Session valid; notes:read request ready
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- API receipt
RP’den normal API request geldi; token context ve object permission ayrı local gate’lerde değerlendirilecek.
- Browser
- Session alias held; no API data
- Atlas · RP server
- Session valid; notes:read request ready
- OpenID Provider
- OP prior authentication valid
- Notes API
- Access alias received; gates pending
- API policy sonucu
Seçili token gate geçerlidir; object policy own note için allow verir. Response body veya DOM bu scene’de yoktur.
- Browser
- Session alias held; no API data
- Atlas · RP server
- Session valid; notes:read request ready
- OpenID Provider
- OP prior authentication valid
- Notes API
- Token accepted; object allow; no body
Object izni yok
- Token sonrası başlangıç
Scene token response RP’deyken başlar; browser redirects ve code exchange ledger’da açıklanır.
- Browser
- Local session yok
- Atlas · RP server
- ID+AT aliases held; gate pending
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP ID validation
RP seçili issuer/audience/time/key/nonce gate’lerini değerlendirir; henüz browser session alias’ı yoktur.
- Browser
- Local session yok
- Atlas · RP server
- ID accepted; iss/sub bound; no session
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- Local session üret
RP yeni identifier ve local lifetime ile session oluşturur; OP state’ini veya API policy’yi değiştirmez.
- Browser
- Local session yok
- Atlas · RP server
- New local session ready; expires=2000
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- Browser response aldı
RP’nin session response’u browser’a ulaştı. Browser seçili session alias’ını aldı ve notlarını açmak için sonraki application request’ini bu alias ile hazırladı; henüz API request’i veya API verisi yoktur.
- Browser
- Session alias alındı; note request hazır; API verisi yok
- Atlas · RP server
- New local session ready; expires=2000
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP normal request aldı
Browser’ın normal note request’i RP’ye ulaştı; session alias receipt’i lookup sonucu değildir.
- Browser
- Session alias held; no API data
- Atlas · RP server
- App request received; session pending
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP session gate
Local lookup time ve invalidation koşulları geçti; RP seçili API credential ve action’ı hazırladı.
- Browser
- Session alias held; no API data
- Atlas · RP server
- Session valid; notes:read request ready
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- API receipt
RP’den normal API request geldi; token context ve object permission ayrı local gate’lerde değerlendirilecek.
- Browser
- Session alias held; no API data
- Atlas · RP server
- Session valid; notes:read request ready
- OpenID Provider
- OP prior authentication valid
- Notes API
- Access alias received; gates pending
- API policy sonucu
Seçili token gate geçerlidir; object policy foreign tenant için deny verir. Response body veya DOM bu scene’de yoktur.
- Browser
- Session alias held; no API data
- Atlas · RP server
- Session valid; notes:read request ready
- OpenID Provider
- OP prior authentication valid
- Notes API
- Token accepted; object deny; no body
RP session doldu
- Local clock sınırı
Browser, önceki session alias’ıyla note request’ini hazırladı. RP kaydı expiresAt=2000 ve now=2000 sınırındadır; OP authentication state’i hâlâ geçerlidir. Browser’daki alias, RP’nin güncel kabul kararını bildirmez.
- Browser
- Önceki session alias; note request hazır
- Atlas · RP server
- Local session expires=2000; now=2000
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP request aldı
Browser’ın normal request’i alias ile RP’ye ulaştı; alias’ın gelmesi timeout’u ortadan kaldırmaz.
- Browser
- Prior session alias held
- Atlas · RP server
- Request received; local session pending
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- RP expiry deny
RP local session gate’i now=expiresAt nedeniyle deny verdi; access token veya object gate’i çağrılmaz.
- Browser
- Prior session alias held
- Atlas · RP server
- Local session denied; no API request
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
- Local hata receipt
RP’nin local-session-denied sonucu browser’a ulaştı; bu, RP’nin local session kararıdır. API’ye request gönderilmedi ve OP’de yeni authentication transaction bu sahnede başlatılmadı.
- Browser
- local-session-denied alındı; API çağrılmadı
- Atlas · RP server
- Local session denied; no API request
- OpenID Provider
- OP prior authentication valid
- Notes API
- API request yok
ROLLER · STATE · VERİ AKIŞI
Bir ekran, birden fazla güven kararı
Mina Atlas sayfasını açtığında browser’ın local session cookie alias’ı olmayabilir. Atlas RP server bir authentication transaction başlatır; seçili issuer, kendi redirect URI’si, S256 PKCE ve browser-bound state/nonce bağlamı hazırlanır. Browser OP authorization endpoint’e yönelir. OP authentication ve grant kararını verir, browser code callback’i izler. Bu sıradaki TLS bağlantıları web origin’lerine transport güveni sağlar; local kullanıcı binding’i veya Notes API izni vermez. Her URL ve redirect aynı socket veya aynı origin içinde gerçekleşmiş sayılmaz.
Callback’in RP’ye ulaşması bir receipt’tir. RP correlation ve seçili issuer bağlamını doğrulayıp code’u server-side token endpoint’te exchange eder. ID token authentication sonucunu RP’ye, access token API erişim bağlamını RS’ye taşır. RP ID token gate’lerini kabul ettikten sonra issuer/subject çiftini local account’a policy ile bağlar ve yeni local session üretir. Browser’a bu profilde yalnız session cookie alias’ı döner; ID/access/refresh token’ları frontend display verisi olarak verilmez. Bu seçili server-side mimaridir, bütün web client’lar için tek zorunlu topology değildir.
Session’dan resource kararına
Mina notlarını açınca browser Atlas’a kendi normal application request’ini yapar. Cookie alias’ının gelmesi local session lookup’ın olumlu olduğu anlamına gelmez: server session mevcut mu, invalidated mı, timeout geçti mi ayrı bakar. Geçerli session user bağlamını kurar; downstream Notes API için RP uygun access token’ı kullanır. API token validation, audience, expiry ve notes:read scope’unu denetler, ardından Mina/tenant/object/read policy’sine karar verir. Valid ID token ve geçerli local session bu son policy’nin yerine geçmez.
Artifact tüm yolculuğu decision-owner tablosuyla verir; scene token response’un RP’de zaten bulunduğu selected başlangıçtan ilerler. ID validation, local session creation, browser response, normal request, RP lookup, API arrival ve API gate görünürdür. OP burada yeni mesaj almaz; önceki authentication state’i açıklayıcı context olarak sabit durur. Son adım allow veya deny policy sonucudur, bir response body’nin browser’da render edildiği veya gerçek not bytes’ın okunduğu iddiası değildir. Expired-session branch’inde API request hiç oluşmaz.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Foreign resource
- Application request’i hazır
Browser session-new-A alias’ıyla normal application request’ini hazırlar. Önceki login acceptance, seçilecek bütün API resource’ları için grant değildir.
- Browser
- Session alias; request hazır
- Server-side RP
- RP request almadı
- Notes API
- API request almadı
- Request RP’ye ulaştı
RP session alias’ını normal application request’iyle aldı. Browser’ın authenticated UI göstermesi yerine local session lookup sonucu değerlendirilir.
- Browser
- Response bekleniyor
- Server-side RP
- Session lookup için input alındı
- Notes API
- API request almadı
- RP session gate’i API request’ini hazırlar
Bu row idGate ve sessionGate true’dur; RP kendi server-side access context’iyle API request’ini hazırlar. ID token, code ve local session cookie API access credential’ı diye değiştirilmez.
- Browser
- Response bekleniyor
- Server-side RP
- Session accepted; API request hazır
- Notes API
- API request almadı
- API request’i ulaştı
API normal request’i aldı; apiReceives=true’dur. Receipt henüz token gate veya object authorization’ın geçtiği anlamına gelmez.
- Browser
- Response bekleniyor
- Server-side RP
- API sonucunu bekliyor
- Notes API
- Request alındı; policy bekliyor
- Object gate sonucu hazırlandı
tokenGate=true olsa da objectGate=false kalır; selected result object-denied’tır. API bu sonucu RP’ye dönmek üzere hazırlar; resource body veya numeric HTTP status uydurulmaz.
- Browser
- Response bekleniyor
- Server-side RP
- API sonucunu bekliyor
- Notes API
- object-denied sonucu hazır
- API kararı RP’ye ulaştı
RP object-denied sonucunu aldı. Browser henüz bu response’u almış veya DOM’u güncellemiş değildir; başarılı login bu resource denial’ını otomatik allow’a çevirmez.
- Browser
- Response hâlâ bekleniyor
- Server-side RP
- Known: object-denied
- Notes API
- object-denied sonucu hazır
Session expiry
- Eski alias ile request hazır
Browser session-new-A alias’ını hâlâ taşır. Bu branch now=2000 ve expiresAt=2000 seçer; OP session true olsa da RP local session policy ayrı karardır.
- Browser
- Alias present; request ready
- Server-side RP
- RP request almadı
- Notes API
- API request almadı
- Request RP’ye ulaştı
RP normal request’te alias’ı aldı. Browser’daki cookie veya OP login state’i local lifetime check yerine kullanılmaz.
- Browser
- Response bekleniyor
- Server-side RP
- Session lookup input alındı
- Notes API
- API request almadı
- Local expiry equality reddedildi
now < expiresAt koşulu equality anında sağlanmaz; sessionGate=false’tur. Bu decision access token expiry sonucu değildir ve OP session’ını da iptal etmiş göstermez.
- Browser
- Response bekleniyor
- Server-side RP
- Local session denied at equality
- Notes API
- API request almadı
- API dispatch durduruldu
apiReceives=false kalır; tokenGate ve objectGate not evaluated olarak korunur. Request gitmediğinde API’nin token’ı reddettiği veya object’i denied ettiği sonucu çıkarılmaz.
- Browser
- Response bekleniyor
- Server-side RP
- No API dispatch
- Notes API
- Token/object not evaluated
- Local denial sonucu hazırlandı
RP local-session-denied sonucunu browser’a döndürmek üzere hazırlar. Yeniden authentication transaction başlatılması ayrı bir akıştır; OP session true diye local context oluşturulmaz.
- Browser
- Response bekleniyor
- Server-side RP
- local-session-denied hazır
- Notes API
- Token/object not evaluated
- RP local kararı browser’da
Browser local-session-denied sonucunu aldı. Alias’ın browser’da kalması session’ı yeniden geçerli yapmaz; API gate’leri bu branch’te hiç değerlendirilmemiştir.
- Browser
- Known: local-session-denied
- Server-side RP
- local-session-denied hazır
- Notes API
- API not contacted
VARSAYIM · SINIR · KONTROL
Login başarısını gereğinden fazla yorumlama
Normal branch ile foreign-resource branch’inde ID token, session ve access token gate’leri aynı şekilde geçerlidir. Değişen yalnız object policy’dir: Mina seçili başka tenant’ın notuna bağlı değildir. Bu ayrım authorization hatasının koşulunu netleştirir. Kimliğin kabulünü her resource için allow sayan sistemde etki, session sahibinin ne kadar veri veya action’a ulaşabildiğine bağlı olur. Client-side sayfanın açılması, callback’in dönmesi veya API receipt’i bunun tek başına kanıtı değildir.
Session-expired branch’i now=2000, expiresAt=2000 seçer. Browser alias’ı hâlâ taşır, OP session geçerlidir, fakat Atlas local session kabul etmez ve API’ye ilerlemez. Bu bir access token expiry testi değildir; RP’nin session clock’una ait failure boundary’dir. OP’nin açık olması RP’nin cookie’sini kendiliğinden yenilemez. Tekrar authentication transaction başlatmak ayrı normal akıştır; sadece “OP login var” bilgisinden session yaratılmaz. Session timeout, credential renewal ve reauthentication ekranını tek hata adı altında toplamak troubleshooting’i yanlış actor’a yöneltir.
Credential saklama sınırı
Credential’ın saklandığı yer de flow’un parçasıdır. Bu server-side profil browser’a ID token göstermediği için bütün browser risklerinin bittiğini iddia etmez: session cookie hâlâ application request’lere katılır ve state-changing işlemler kendi request protection’ını ister. HttpOnly script’in cookie okumasını kısıtlar; cookie ile yapılabilen her işlem için authorization garantisi vermez. Trust boundary’nin neyi koruduğunu, credential type ve recipient ile birlikte okumak gerekir.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Gate owner’ları
- Login journey evidence haritası seçildi
Journey stage’leri transport, transaction, ID validation, local session ve API policy owner’larını ayırır. Review bunları tek login success satırına indirmez.
- Journey observation
- Journey stages 1–12
- Credential/gate review
- Owner map okunmadı
- Product evidence scope
- Ürün sonucu bilinmiyor
- Callback ve token endpoint ayrıldı
Stage 4 code callback, stage 5 RP correlation ve stage 6 OP token endpoint sonucudur. Browser’ın callback’e dönmesi ID validation’ın veya API access’in tamamlandığı anlamına gelmez.
- Journey observation
- Callback/token exchange map
- Credential/gate review
- Code recipient: OP token endpoint
- Product evidence scope
- API sonucu bilinmiyor
- ID ve local session gate’leri ayrıldı
Stage 7 RP ID issuer/audience/time/key/signature/nonce gate’idir; stage 8 iss/sub binding ve yeni session’dır. ID token yalnız RP authentication validator’a aittir.
- Journey observation
- ID/session map
- Credential/gate review
- ID recipient: RP; session: RP lookup
- Product evidence scope
- API sonucu bilinmiyor
- API token ve object gate’leri ayrıldı
Stage 11 API access context’i, stage 12 tenant/object/action policy’sidir. Access credential, code veya session cookie ile eşanlamlı değildir; her gate kendi evidence’ını üretir.
- Journey observation
- API gate map
- Credential/gate review
- Token gate ≠ object gate
- Product evidence scope
- Policy result ayrı
- Delivery ve DOM kapsamı dışarıda kaldı
sceneOmissions API response body ve DOM rendering’i içerir. Full gate haritasını okumak gerçek data read, cookie acceptance veya kullanıcı görüntüsünün kanıtı değildir.
- Journey observation
- Declared full gate map
- Credential/gate review
- Owner boundaries explicit
- Product evidence scope
- UNKNOWN: body/DOM delivery
- Journey hükmü kanıta göre kapandı
Harita hangi owner’ın hangi kararı üretmesi gerektiğini açıklar. Gerçek validator, session store ve API observation’ları gelmeden tüm login yolunun runtime’da doğrulandığı sonucu verilmez.
- Journey observation
- Known: decision ownership map
- Credential/gate review
- Runtime observations ayrı gerekir
- Product evidence scope
- UNKNOWN: actual end-to-end outcome
API receipt
- Foreign-resource decision seçildi
Foreign-resource row idGate, sessionGate, opSession ve tokenGate true taşır. Review apiReceives alanı ile final object kararını ayrı gözlem olarak okur.
- Journey observation
- Foreign-resource row
- Credential/gate review
- API evidence incelenmedi
- Product evidence scope
- Resource sonucu bilinmiyor
- API receipt kaydı okundu
apiReceives=true yalnız API’nin bu normal request’i aldığına dair declared state’tir. Receive, token verification ve data delivery aynı anlamda değildir.
- Journey observation
- apiReceives=true
- Credential/gate review
- Receipt known in row
- Product evidence scope
- Delivery bilinmiyor
- Token acceptance kapsamı korundu
tokenGate=true token context’inin bu row’da geçerli olduğunu gösterir. Bu alan object relation veya tenant policy’nin yerine geçirilmez.
- Journey observation
- apiReceives=true
- Credential/gate review
- tokenGate=true
- Product evidence scope
- Object sonucu inceleniyor
- Final policy sonucu karşılaştırıldı
objectGate=false ve expected=object-denied kayıtlıdır. API receipt true kalırken resource action olumsuz olabilir; bu fark login failure diye yeniden adlandırılmaz.
- Journey observation
- Known: receipt
- Credential/gate review
- Known: valid token context
- Product evidence scope
- Known: object-denied
- Eksik body gözlemi korundu
Artifact selected policy result gösterir, API response body üretmez. Dolayısıyla gerçek body teslimi veya client DOM sonucu ayrı evidence olmadan bu row’a eklenmez.
- Journey observation
- Known: receipt
- Credential/gate review
- Known: object denial
- Product evidence scope
- UNKNOWN: actual body/DOM
- Gate correlation sınırlandı
Bu row login success ile object denial’ın beraber olabildiğini açıklar. Token/code/session secrets log’a eklenmeden correlation kurulabilir; actual protocol-run iddiası verilmez.
- Journey observation
- Declared gate correlation
- Credential/gate review
- Known: object-denied
- Product evidence scope
- Observed product outcome ayrı
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Her gate’e bir owner ve kanıt ver
Atlas transport peer’ini, transaction correlation’ını, OP identity’sini, local session’ını ve API resource policy’sini ayrı kayıtlarla izler. Başarılı login sonrası yeni session identifier seçmek ve eski pre-authentication context’i yükseltilmiş session’a taşımamak session lifecycle tasarımıdır. Secure, HttpOnly ve host-bound cookie kapsamı seçilir; SameSite callback türüyle birlikte değerlendirilir. GET redirect ile POST response aynı cookie davranışı kabul edilmez. Fixture cookie bytes üretmez ve browser’ın bu policy’yi uyguladığını ölçmez.
Local regression üç branch’i karşılaştırır. Normalde ID gate önce geçer, session sonra yaratılır, API ancak normal request ve başarılı session lookup sonrasında gelir. Foreign-resource’da token gate true fakat object gate false olduğundan deny; expired-session’da OP state true olsa da API’ye hiç mesaj yoktur. Zaman fixture’ı 1999/2000 sınırını ve invalidated session’ı ayrıca değerlendirir. Bu kontroller bir gerçek login’i taklit eden screenshot değil, aynı karar tablosunun yeniden üretilebilir state kontrolüdür.
Her gate kendi kanıtını üretir
Operasyonel incelemede gerekli kanıtın kaynağı da değişir: RP validation library’si signature sonucu, session store timeout sonucu, API policy engine’i object kararı üretir. Safe correlation ID olayları bağlayabilir; token, code, cookie veya private key log’a taşınmaz. Provider interoperability, key rollover, consent/freshness policy, refresh davranışı ve browser navigation testi için ayrı izole entegrasyon gerekir. Bu dersin tam yol tablosu o testleri planlamaya yardımcı olur; modelin tamamlanması o dış sistemlerde başarı anlamına gelmez.
ŞİMDİ VAKAYA UYGULA
RP session kabulü API action’ına hangi şartla ulaşır?
Browser local session alias’ı taşır; RP ve API kendi gate’lerini uygular. OP state veya başarılı login, resource action ve browser knowledge sonucuna eşitlenmez.
Vakadaki identity hangi issuer ve recipient ilişkisinden geliyor? Login veya delegation başarısı ile current tenant/object permission için gereken kanıtları ayır.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas login gate ledger
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"architecture": "confidential server-side RP",
"flow": "OIDC authorization_code + S256",
"browserCredential": "local session alias only",
"tokenResponseHeldAtSceneStart": true,
"actualProtocolRun": false,
"actualCookieIssued": false,
"actualApiDataRead": false
},
"journey": [
{
"stage": 1,
"actor": "RP",
"evidence": "new browser-bound transaction; selected issuer, redirect, state, nonce, PKCE context"
},
{
"stage": 2,
"actor": "Browser",
"evidence": "normal navigation to OP; no RP authentication acceptance yet"
},
{
"stage": 3,
"actor": "OP",
"evidence": "owner authentication and grant decision"
},
{
"stage": 4,
"actor": "Browser",
"evidence": "code callback; no access token at API"
},
{
"stage": 5,
"actor": "RP",
"evidence": "callback correlation and selected issuer context accepted"
},
{
"stage": 6,
"actor": "OP token endpoint",
"evidence": "client/code/redirect/PKCE gate; token response"
},
{
"stage": 7,
"actor": "RP",
"evidence": "ID issuer/audience/time/key provenance/signature/nonce gate"
},
{
"stage": 8,
"actor": "RP",
"evidence": "local iss/sub binding and new session"
},
{
"stage": 9,
"actor": "Browser",
"evidence": "session alias in normal application request"
},
{
"stage": 10,
"actor": "RP",
"evidence": "session lookup/expiry/invalidation gate; select API credential"
},
{
"stage": 11,
"actor": "API",
"evidence": "access token context and audience/time/scope gate"
},
{
"stage": 12,
"actor": "API",
"evidence": "tenant/object/action authorization; selected policy result only"
}
],
"session": {
"alias": "session-new-A",
"issuer": "https://id.example.org",
"subject": "subject-Mina",
"expiresAt": 2000,
"invalidated": false,
"identifierRenewedAfterAuthentication": true,
"cookiePolicy": {
"Secure": true,
"HttpOnly": true,
"hostBound": true,
"SameSite": "Lax selected GET callback profile",
"csrfForStateChangeSeparate": true
}
},
"sessionCases": [
{
"name": "normal",
"now": 1050,
"exists": true,
"invalidated": false,
"expected": true
},
{
"name": "last-valid",
"now": 1999,
"exists": true,
"invalidated": false,
"expected": true
},
{
"name": "expiry-equality",
"now": 2000,
"exists": true,
"invalidated": false,
"expected": false
},
{
"name": "invalidated",
"now": 1050,
"exists": true,
"invalidated": true,
"expected": false
}
],
"cases": [
{
"case": "normal",
"idGate": true,
"sessionGate": true,
"opSession": true,
"tokenGate": true,
"objectGate": true,
"apiReceives": true,
"expected": "allow"
},
{
"case": "foreign-resource",
"idGate": true,
"sessionGate": true,
"opSession": true,
"tokenGate": true,
"objectGate": false,
"apiReceives": true,
"expected": "object-denied"
},
{
"case": "session-expired",
"idGate": "prior login accepted",
"sessionGate": false,
"opSession": true,
"tokenGate": "not evaluated",
"objectGate": "not evaluated",
"apiReceives": false,
"expected": "local-session-denied"
}
],
"credentialRecipients": {
"code": "OP token endpoint",
"idToken": "RP authentication validator",
"accessToken": "API resource validator",
"refreshToken": "OP token endpoint, if issued",
"sessionCookie": "RP local session lookup"
},
"sceneOmissions": [
"browser-to-OP and callback navigation",
"token exchange",
"DNS/TLS/HTTP encoders",
"actual token validation",
"refresh and logout",
"API response body and DOM rendering"
]
}- journey
- Tam yolun her gate’i ayrı owner ve evidence taşır.
- session
- Local timeout ve cookie policy; token exp ile eşit değildir.
- sessionCases
- Zero-leeway local session sınırı ve invalidation.
- cases
- OP state tek başına RP session/API izni üretmez.
- credentialRecipients
- Credential type ile hedef validation sahibini ayırır.
Full journey bir açıklama ledger’ıdır; scene yalnız token response sonrasını işler. Gerçek login, token/JWS, cookie, session store, browser veya API çalıştırılmaz.
İki yanlış kanı
Callback tamamlandıysa API erişimi de başarılıdır.
Callback receipt; token/ID validation, session lookup ve API policy ayrı gate’lerdir.
OP session açıkken Atlas session’ı expire olmaz.
OP ve RP kendi session lifetime’larını yönetir; biri diğerini otomatik yenilemez.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
OP session aktif, fakat RP’nin yerel session süresi dolmuş. Bu API request’i gönderilir mi?
- Hayır. local-session-denied ve apiReceives=false.
- Evet. OP session, bütün RP expiry sürelerini geçersiz kılar.
Gerekçeli cevabı oku
Hayır. local-session-denied ve apiReceives=false. — Önceki login’in kabul edilmesi, session’ın şimdi geçerli olduğunu göstermez. Bu branch’te request durur; token ve object kontrollerine geçilmez.
Foreign-resource branch’i login hatası mı, object izni hatası mı?
Dersten seçilen artifact alanları; öğretim örneği
- cases[1]
- {"case":"foreign-resource","idGate":true,"sessionGate":true,"opSession":true,"tokenGate":true,"objectGate":false,"apiReceives":true,"expected":"object-denied"}
- Her deny, password veya OP login’in başarısız olduğunu gösterir.
- Object izni hatası; önceki kontroller başarılı.
Gerekçeli cevabı oku
Object izni hatası; önceki kontroller başarılı. — API token context’ini kabul etmiştir, fakat bu foreign resource için izin vermemiştir. Authentication ile object authorization ayrı sonuçlardır.
iss/sub eşlemesi, yeni session identifier ve state-changing request için CSRF kontrolü neden üç ayrı karardır?
Gerekçeli cevabı oku
RP, issuer+subject çiftini doğru yerel account’a bağlar ve başarılı authentication sonrasında yeni session generation oluşturur. Cookie flag’leri bu session’ın taşınmasını sınırlar. State-changing request’in action intent ve CSRF kontrolü ayrıca gerekir. Scene token exchange, body ve DOM aşamalarını göstermediği için policy sonucu gerçek API delivery kanıtı değildir.
□ iss/sub eşlemesini display name ile karıştırmadım.
□ Session oluşturulmasını action intent için izin saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- OpenID Connect Core 1.0 — Final incorporating errata set 2§1 Introduction and terminology; §2 ID Token · §3.1.2.1 Authentication Request: openid, prompt, nonce, max_age · §3.1.2.6 Authentication Error Response · §3.1.3.2 Token Request Validation; §3.1.3.5 Token Response Validation · §3.1.3.7 ID Token Validation; §3.1.3.8 Access Token Validation · §5.7 Claim Stability and Uniqueness
- RFC 9700 — Best Current Practice for OAuth 2.0 Security§2.1 Protecting Redirect-Based Flows; §2.1.1 Authorization Code Grant · §2.1.2 Implicit Grant; §2.2.1 Access Tokens; §2.2.2 Refresh Tokens · §2.3 Access Token Privilege Restriction; §2.4 Resource Owner Password Credentials Grant; §2.5 Client Authentication
- RFC 6749 — The OAuth 2.0 Authorization Framework§1.1 Roles; §1.2 Protocol Flow; §1.3.1 Authorization Code · §1.4 Access Token; §1.5 Refresh Token · §3.2.1 Client Authentication; §3.3 Access Token Scope · §4.1.1–4.1.4 Authorization Code Grant · §5.1 Successful Response; §6 Refreshing an Access Token; §7 Accessing Protected Resources
- OWASP Session Management Cheat SheetSameSite Attribute; Domain and Path Attributes · Session Expiration / Idle Timeout; Absolute Timeout · Renew the Session ID After Any Privilege Level Change
- OWASP Authorization Cheat SheetRecommendations / Enforce Least Privileges · Recommendations / Deny by Default; Validate the Permissions on Every Request
- RFC 6750 — The OAuth 2.0 Authorization Framework: Bearer Token Usage§1.2 Terminology: Bearer Token · §2.1 Authorization Request Header Field · §2.3 URI Query Parameter security qualifications