Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Kendi notu

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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

  1. 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
  2. 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
  3. 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
  4. 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

  1. 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ı
  2. 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ı
  3. 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ı
  4. 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
  5. 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
  6. 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

  1. 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ı
  2. 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ı
  3. 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ı
  4. 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
  5. 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
  6. 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ı

  1. 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
  2. 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
  3. 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
  4. 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ı
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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?

  1. Hayır. local-session-denied ve apiReceives=false.
  2. 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"}
  1. Her deny, password veya OP login’in başarısız olduğunu gösterir.
  2. 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