Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-14.S03

Token verification, purpose ve key lifecycle

Bir token’ın integrity kanıtı ile bu API’de kabul edilme amacı ve key lifecycle koşullarını ayır.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Doğru profile

  1. Read amacı belirlendi

    Client, bilinen public note title’ını okumak için Atlas API’nin acceptance context’ini izler. Bu aşamada henüz title verisi yoktur.

    Atlas client
    Title yok; read amacı belirlendi
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  2. Request hazır

    Token biçimini temsil eden alias ve bilinen read operation hazırlanır. Request gerçek token bytes veya key materyali taşımaz.

    Atlas client
    Read request hazır; alias=normal
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  3. Verifier aldı

    Request verifier’a ulaşmıştır. Header ve claims henüz kabul edilmiş identity veya resource permission değildir.

    Atlas client
    Read request hazır; alias=normal
    Token verifier
    Request ulaştı; acceptance bekliyor
    Public note store
    Public title saklanıyor; delivery yok
  4. Yerel acceptance kararı

    Güvenilen key ve önceden verilen crypto koşulu ile issuer/audience/purpose/time profile’ı kabul edilir. İzinli resource read hazırlanır.

    Atlas client
    Read request hazır; alias=normal
    Token verifier
    Bütün gate’ler geçildi; resource read hazır
    Public note store
    Public title saklanıyor; delivery yok
  5. Read store’a ulaştı

    Public note için read mesajı store’a ulaşmıştır. Request’in alınması response body’nin hazır olduğu anlamına gelmez.

    Atlas client
    Read request hazır; alias=normal
    Token verifier
    Bütün gate’ler geçildi; resource read hazır
    Public note store
    Read ulaştı; title body’si bekliyor
  6. Yerel public read

    Atlas store izinli public title projection’ını yerel olarak seçer. Bu read sırasında note üzerinde mutation yapılmaz.

    Atlas client
    Read request hazır; alias=normal
    Token verifier
    Bütün gate’ler geçildi; resource read hazır
    Public note store
    Title response’u hazır; Tea & Bread
  7. Title verifier’a ulaştı

    Public title response’u verifier’a ulaşmıştır. Body client’a iletilmeye hazırdır; bu response başka bir permission üretmez.

    Atlas client
    Read request hazır; alias=normal
    Token verifier
    Public body ulaştı; client response’u hazır
    Public note store
    Title response’u hazır; Tea & Bread
  8. Client response’u aldı

    Response client’a ulaşmış ve title verisi kullanılabilir olmuştur. Bu aşama DOM parsing veya display sonucu göstermez.

    Atlas client
    Response ulaştı; title=Tea & Bread
    Token verifier
    Public body ulaştı; client response’u hazır
    Public note store
    Title response’u hazır; Tea & Bread

Amaç reddi

  1. Read amacı belirlendi

    Client, bilinen public note title’ını okumak için Atlas API’nin acceptance context’ini izler. Bu aşamada henüz title verisi yoktur.

    Atlas client
    Title yok; read amacı belirlendi
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  2. Request hazır

    Token biçimini temsil eden alias ve bilinen read operation hazırlanır. Request gerçek token bytes veya key materyali taşımaz.

    Atlas client
    Read request hazır; alias=wrong-purpose
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  3. Verifier aldı

    Request verifier’a ulaşmıştır. Header ve claims henüz kabul edilmiş identity veya resource permission değildir.

    Atlas client
    Read request hazır; alias=wrong-purpose
    Token verifier
    Request ulaştı; acceptance bekliyor
    Public note store
    Public title saklanıyor; delivery yok
  4. Yerel key bilgisi

    Key, yapılandırılmış issuer’a bağlı key-v2’dir; state=active ve signatureVerifiedDeclared=true olarak verilmiştir. Bu olumlu koşullar tek başına claims’in notes-read için kullanılabileceğini söylemez; purpose kararı sıradadır.

    Atlas client
    Read request hazır; alias=wrong-purpose
    Token verifier
    Key/crypto koşulu olumlu; profile bekliyor
    Public note store
    Public title saklanıyor; delivery yok
  5. Yerel profile gate’i

    Claims purpose=preview-render taşır; profile notes-read ister. purpose uyuşmadığı için expectedAccepted=false olur. Verifier resource’a read mesajı hazırlamaz; body=null ve delivery=false kalır.

    Atlas client
    Read request hazır; alias=wrong-purpose
    Token verifier
    Acceptance reddi: purpose; body yok
    Public note store
    Public title saklanıyor; delivery yok
  6. Ret response’u hazır

    Ret response’u hazırlanır. Resource store’a read veya mutation mesajı gönderilmez; title body’si üretilmez.

    Atlas client
    Read request hazır; alias=wrong-purpose
    Token verifier
    Ret response’u hazır; resource body yok
    Public note store
    Public title saklanıyor; delivery yok
  7. Ret client’a ulaştı

    Ret sonucu client’a ulaşmıştır. Korunan note body’si yoktur; bu branch resource’dan title delivery üretmemiştir.

    Atlas client
    Ret ulaştı; title yok
    Token verifier
    Ret response’u hazır; resource body yok
    Public note store
    Public title saklanıyor; delivery yok

Retired key

  1. Read amacı belirlendi

    Client, bilinen public note title’ını okumak için Atlas API’nin acceptance context’ini izler. Bu aşamada henüz title verisi yoktur.

    Atlas client
    Title yok; read amacı belirlendi
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  2. Request hazır

    Token biçimini temsil eden alias ve bilinen read operation hazırlanır. Request gerçek token bytes veya key materyali taşımaz.

    Atlas client
    Read request hazır; alias=retired-key
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  3. Verifier aldı

    Request verifier’a ulaşmıştır. Header ve claims henüz kabul edilmiş identity veya resource permission değildir.

    Atlas client
    Read request hazır; alias=retired-key
    Token verifier
    Request ulaştı; acceptance bekliyor
    Public note store
    Public title saklanıyor; delivery yok
  4. Yerel key bilgisi

    Key-v1, güvenilen issuer’a ait olsa da state=retired ve verifyUntil=1700000090’dır. Profile now=1700000100 için bu key ile kabul izinli değildir. Bu sonuç token’ın exp sınırına gelmiş olmasıyla aynı değildir.

    Atlas client
    Read request hazır; alias=retired-key
    Token verifier
    key-v1 retired; acceptance reddedildi
    Public note store
    Public title saklanıyor; delivery yok
  5. Yerel profile gate’i

    Token’ın nbf/exp aralığı uygun olsa da önceki key policy reddi korunur: reason=key-retired. Verifier resource read’i hazırlamaz; body=null, delivery=false ve mutation=false kalır.

    Atlas client
    Read request hazır; alias=retired-key
    Token verifier
    Acceptance reddi: key-retired; body yok
    Public note store
    Public title saklanıyor; delivery yok
  6. Ret response’u hazır

    Ret response’u hazırlanır. Resource store’a read veya mutation mesajı gönderilmez; title body’si üretilmez.

    Atlas client
    Read request hazır; alias=retired-key
    Token verifier
    Ret response’u hazır; resource body yok
    Public note store
    Public title saklanıyor; delivery yok
  7. Ret client’a ulaştı

    Ret sonucu client’a ulaşmıştır. Korunan note body’si yoktur; bu branch resource’dan title delivery üretmemiştir.

    Atlas client
    Ret ulaştı; title yok
    Token verifier
    Ret response’u hazır; resource body yok
    Public note store
    Public title saklanıyor; delivery yok

Key unavailable

  1. Read amacı belirlendi

    Client, bilinen public note title’ını okumak için Atlas API’nin acceptance context’ini izler. Bu aşamada henüz title verisi yoktur.

    Atlas client
    Title yok; read amacı belirlendi
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  2. Request hazır

    Token biçimini temsil eden alias ve bilinen read operation hazırlanır. Request gerçek token bytes veya key materyali taşımaz.

    Atlas client
    Read request hazır; alias=unknown-key
    Token verifier
    Henüz acceptance yok; keys yapılandırıldı
    Public note store
    Public title saklanıyor; delivery yok
  3. Verifier aldı

    Request verifier’a ulaşmıştır. Header ve claims henüz kabul edilmiş identity veya resource permission değildir.

    Atlas client
    Read request hazır; alias=unknown-key
    Token verifier
    Request ulaştı; acceptance bekliyor
    Public note store
    Public title saklanıyor; delivery yok
  4. Yerel key bilgisi

    kid=key-unlisted yapılandırılmış issuer key set’inde bulunamadı. signatureVerifiedDeclared=null olduğundan signature geçerli veya geçersiz denemez. Trusted-source refresh sonucu da yoktur; untrusted header URL’si key kaynağı sayılmaz.

    Atlas client
    Read request hazır; alias=unknown-key
    Token verifier
    Key alınamadı; crypto sonucu bilinmiyor
    Public note store
    Public title saklanıyor; delivery yok
  5. Yerel profile gate’i

    Key doğrulama kanıtı eksik olduğundan reason=key-unavailable ile kabul durur. Bu bilinen fail-closed kararı forgery kanıtı değildir. Resource read hazırlanmaz; body=null, delivery=false ve mutation=false kalır.

    Atlas client
    Read request hazır; alias=unknown-key
    Token verifier
    Acceptance reddi: key-unavailable; body yok
    Public note store
    Public title saklanıyor; delivery yok
  6. Ret response’u hazır

    Ret response’u hazırlanır. Resource store’a read veya mutation mesajı gönderilmez; title body’si üretilmez.

    Atlas client
    Read request hazır; alias=unknown-key
    Token verifier
    Ret response’u hazır; resource body yok
    Public note store
    Public title saklanıyor; delivery yok
  7. Ret client’a ulaştı

    Ret sonucu client’a ulaşmıştır. Korunan note body’si yoktur; bu branch resource’dan title delivery üretmemiştir.

    Atlas client
    Ret ulaştı; title yok
    Token verifier
    Ret response’u hazır; resource body yok
    Public note store
    Public title saklanıyor; delivery yok

ROLLER · STATE · VERİ AKIŞI

Token biçimi hangi korumayı taşır?

Atlas, Tea & Bread başlıklı public note için Duru’ya notes-read amaçlı bir access context verir. JWT claims taşıyan biçimdir; JWS signature veya MAC ile integrity, JWE authenticated encryption ile confidentiality ve integrity sağlar. JWS Compact üç, JWE Compact beş parça taşır; parçaları saymak validation değildir. Signed payload genellikle okunabilir ve Base64url encryption sağlamaz. JWE decrypt edilse bile expected issuer’ın kimliği tek başına kanıtlanmış olmaz; key provenance ve acceptance profile’ı ayrıca gerekir. Nested token’da gerekli outer ve inner cryptographic operation’ların tamamı doğrulanmalıdır. Artifact header ve claims alanlarını ayrı gösterir. signatureVerifiedDeclared önceden verilmiş bir sonuçtur; gerçek JWT string’i veya parser çıktısı değildir.

Verifier kendi acceptance profile’ını seçer

Verifier, alg alanının istediği herhangi bir algorithm’ı seçmez; application allowedAlgorithms ve key kullanımını aynı cryptographic operation’da sınırlar. kid, trusted issuer key set’i içinde seçim ipucudur ve trust anchor değildir. Atlas issuer’ı, issuer-subject pair’ini, audience’ı, typ değerini ve notes-read purpose’ını bekler. aud bir string veya string array olabilir; eşleşme hedef recipient’a göre değerlendirilir. Buradaki purpose uygulamaya özel claim, atlas-notes+jwt ise örneğin profile type’ıdır; bütün JWT’ler için zorunlu değildir. Registered claim’lerin tamamı her uygulamada required sayılmaz; bu profile requiredClaims listesini açıkça seçer. API access context, ID token ve başka amaçlı signed object farklı acceptance rules ister. Identity kabul edildikten sonra object/action authorization ayrıca yürür.

Time ve key lifecycle tek karar değildir

NumericDate, UTC epoch’tan geçen saniyeleri sayar; JavaScript milliseconds ile karıştırılmaz. Clock skew kabul etmeyen bu örnekte now >= nbf ve now < exp gerekir; now == exp sınırında token reddedilir. iat issuance bilgisidir, kendi başına not-before veya logout kontrolü değildir. Üretimde clock skew ve maximum age acceptance profile’ına göre belirlenir. Active signing key ile eski verification key bir süre birlikte kullanılabilir; overlap süresi deployment policy’sidir. Atlas’ta key-v1 verifyUntil sınırını geçmiş, key-v2 ise active kalmıştır. Unknown kid için trusted kaynaktan key bilgisi alınamaması kabul kanıtı vermez, fakat otomatik forgery kanıtı da değildir. Rotation, emergency revocation, cache propagation ve session logout farklı olaylardır. Header’ın bildirdiği URL’yi güven kaynağı yapmak yerine önceden güvenilen issuer-key bağı korunur.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Key retired

  1. Token profile kapsamı seçildi

    Bu case notes-read purpose, atlas-notes+jwt type ve atlas-notes-api recipient policy’sine göre değerlendirilir. Decode edilmiş claims tek başına trusted context değildir.

    Token profile
    case=retired-key
    Key/purpose gate
    Key/profile incelenmedi
    Resource boundary
    Resource body yok
  2. Signature predicate ayrı okundu

    signatureVerifiedDeclared=true olarak verilmiştir. Bu olumlu predicate, trusted key lifecycle veya operation purpose gate’ini otomatik tamamlamaz.

    Token profile
    case=retired-key
    Key/purpose gate
    Declared signature=true
    Resource boundary
    Resource body yok
  3. Key state veya purpose sınırı uygulandı

    kid=key-v1 configured issuer’a bağlıdır, fakat state=retired ve verifyUntil=1700000090’dır. Profile now=1700000100 için verification kullanımı izinli değildir.

    Token profile
    case=retired-key
    Key/purpose gate
    Key retired at current profile time
    Resource boundary
    Resource body yok
  4. Time ve diğer gate’ler karıştırılmadı

    exp=1700000300 ve nbf=1700000000 bu profile time’ında uygundur. Token time koşulu retired key kullanımını yeniden izinli yapmaz.

    Token profile
    case=retired-key
    Key/purpose gate
    Time koşulu uygun
    Resource boundary
    Resource body yok
  5. Delivery ve mutation durduruldu

    expectedAccepted=false, expectedBody=null, expectedResourceDelivery=false ve expectedMutation=false korunur. Crypto success, bu note için trusted action context’i kurmaz.

    Token profile
    case=retired-key
    Key/purpose gate
    Reason: key-retired
    Resource boundary
    Body=null; delivery=false; mutation=false
  6. Key provenance ile hint ayrımı korundu

    kid bir selection hint’idir; trust anchor değildir. Retirement policy farklı olabilir, fakat bu case’in configured policy denial’ı issuer compromise veya expired JWT olarak yeniden adlandırılmaz.

    Token profile
    case=retired-key
    Key/purpose gate
    Configured denial biliniyor
    Resource boundary
    Trusted resource dispatch yok

Purpose farklı

  1. Token profile kapsamı seçildi

    Bu case notes-read purpose, atlas-notes+jwt type ve atlas-notes-api recipient policy’sine göre değerlendirilir. Decode edilmiş claims tek başına trusted context değildir.

    Token profile
    case=wrong-purpose
    Key/purpose gate
    Key/profile incelenmedi
    Resource boundary
    Resource body yok
  2. Signature predicate ayrı okundu

    signatureVerifiedDeclared=true olarak verilmiştir. Bu olumlu predicate, trusted key lifecycle veya operation purpose gate’ini otomatik tamamlamaz.

    Token profile
    case=wrong-purpose
    Key/purpose gate
    Declared signature=true
    Resource boundary
    Resource body yok
  3. Key state veya purpose sınırı uygulandı

    Claims purpose=preview-render taşır, policy ise notes-read ister. Issuer ve audience eşleşse de bu farklı kullanım purpose gate’ini karşılamaz.

    Token profile
    case=wrong-purpose
    Key/purpose gate
    Purpose preview-render ≠ notes-read
    Resource boundary
    Resource body yok
  4. Time ve diğer gate’ler karıştırılmadı

    exp=1700000300 ve nbf=1700000000 bu profile time’ında uygundur. Token time koşulu yanlış purpose’u doğruya çevirmez.

    Token profile
    case=wrong-purpose
    Key/purpose gate
    Time koşulu uygun
    Resource boundary
    Resource body yok
  5. Delivery ve mutation durduruldu

    expectedAccepted=false, expectedBody=null, expectedResourceDelivery=false ve expectedMutation=false korunur. Crypto success, bu note için trusted action context’i kurmaz.

    Token profile
    case=wrong-purpose
    Key/purpose gate
    Reason: purpose
    Resource boundary
    Body=null; delivery=false; mutation=false
  6. Key provenance ile hint ayrımı korundu

    Signed claims bu purpose için uygun değildir. JWE encryption da farklı recipient/purpose acceptance rule’larını kaldırmaz; protection formatı action grant’i değildir.

    Token profile
    case=wrong-purpose
    Key/purpose gate
    Configured denial biliniyor
    Resource boundary
    Trusted resource dispatch yok

VARSAYIM · SINIR · KONTROL

Crypto success’ı yanlış amaçta kullanmak

Signature verification’ın olumlu olması, belirli bytes’ın yapılandırılmış key ile doğrulandığını söyler; token’ın bu recipient ve operation için uygun olduğunu söylemez. İncelenen yanlış varsayım, trusted issuer’ın bütün signed claim set’lerinin her consumer’da aynı anlamı taşımasıdır. Bu karışıklık, birden fazla purpose/profile bulunup consumer’ın audience, type veya required value sınırlarını ayırmamasıyla oluşabilir. Etki identity veya erişim kapsamının yanlış yorumlanmasıdır; buradan bütün hesapların ele geçirildiği sonucu çıkmaz. wrong-purpose kaydı signatureVerifiedDeclared=true bırakır ama API acceptance’ını reddeder; resource delivery ve title body oluşmaz. Birbirinden ayrılan profile rules ile object authorization birlikte sınırı korur. Encryption tek başına yanlış purpose kullanımını düzeltmez.

Key seçimini güven kaynağı sanmak

Normal key rollout, eski key’i belirli süre verification için tutabilir; key-v1 görülmesi token’ın expired olduğu anlamına gelmez. Yanlış varsayım, kid’in bulunmasının key’in issuer’a ait ve hâlâ izinli olduğunu kanıtlamasıdır. Stale cache, rollover gecikmesi veya trusted key service outage gibi meşru nedenler unknown sonuç doğurabilir; bu yüzden key-unavailable ayrı reason’dır. Retired kaydında time claims geçerli kalsa da application key policy’si kabulü reddeder. Kontrol trusted provenance’ı, algorithm/use bağını ve retirement veya revocation propagation’ını korur. Olası etki bu consumer’ın kabul ettiği claim context’ine bağlıdır. Alias’ların bulunması key materyalinin mevcut veya signature’ın doğrulandığı kanıtı değildir.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Key bilinmiyor

  1. Unknown-key observation seçildi

    Header kid=key-unlisted taşır, fakat configured keys listesinde bu alias yoktur. Key metadata’sının bulunmaması ile invalid signature sonucu aynı evidence değildir.

    Verification observation
    case=unknown-key
    Key/lifecycle review
    Key lookup incelenmedi
    Evidence conclusion
    Acceptance hükmü yok
  2. Trusted provenance sınırı okundu

    Approved source configured issuer’a bağlı key alias’larıdır. Untrusted header URL’si fetch edilmez; kid metni kendi başına issuer/key trust kurmaz.

    Verification observation
    kid=key-unlisted
    Key/lifecycle review
    Configured key bulunamadı
    Evidence conclusion
    Acceptance hükmü yok
  3. Crypto sonucu unknown bırakıldı

    signatureVerifiedDeclared=null olduğundan signature’ın geçerli veya geçersiz olduğu söylenmez. Stale cache, rollout veya trusted service outage bu boşluğu tek başına açıklanmış sayılmaz.

    Verification observation
    case=unknown-key
    Key/lifecycle review
    Signature outcome=null
    Evidence conclusion
    UNKNOWN: crypto verification
  4. Acceptance eksik kanıtta kapalı kaldı

    Reason key-unavailable ve expectedAccepted=false’tur. Bu fail-closed karar body, mutation ve resource delivery üretmez; unavailable key forging kanıtı değildir.

    Verification observation
    case=unknown-key
    Key/lifecycle review
    Reason: key-unavailable
    Evidence conclusion
    No body/mutation/delivery
  5. Refresh kanıtı ayrıca istendi

    Lifecycle bounded trusted-source refresh seçer, fakat bu scene network çalıştırmaz. Yeni key source ve freshness sonucu gelmeden acceptance varsayımı yapılmaz.

    Verification observation
    case=unknown-key
    Key/lifecycle review
    Trusted freshness gerekir
    Evidence conclusion
    UNKNOWN: refreshed key outcome
  6. Unknown ile invalid ayrımı kapandı

    Bu case’in bilinen sonucu no acceptance’tır; signature validity bilinmez. Key rotation, revocation ve trusted provenance kendi evidence’larıyla açıklanır.

    Verification observation
    Known: key unavailable
    Key/lifecycle review
    UNKNOWN: signature validity
    Evidence conclusion
    Known: delivery withheld

Logout kapsamı

  1. Lifecycle policy kaydı seçildi

    logoutMeansAutomaticJWTRevocation=false bu formatın sınırını açıklar. Browser cleanup veya session logout gözlemi verilse bile bütün JWT acceptance state’leri aynı owner’da değildir.

    Verification observation
    Lifecycle policy
    Key/lifecycle review
    Revocation path incelenmedi
    Evidence conclusion
    Current acceptance bilinmiyor
  2. Key overlap policy okundu

    oldKeyOverlapIsConfiguredNotUniversal=true’dur. Routine rotation’da eski key’in ne kadar verification için tutulacağı configuration’dır; token string biçiminden çıkarılmaz.

    Verification observation
    Lifecycle policy
    Key/lifecycle review
    Overlap configured
    Evidence conclusion
    Current acceptance bilinmiyor
  3. Emergency revoke ayrı tutuldu

    compromiseRequiresExplicitRevocationPolicy=true kaydı emergency revoke için ayrı tasarım gerektiğini gösterir. Routine overlap otomatik incident response değildir.

    Verification observation
    Lifecycle policy
    Key/lifecycle review
    Explicit revoke policy gerekir
    Evidence conclusion
    Current acceptance bilinmiyor
  4. JWS ile confidentiality ayrıldı

    JWS Compact ledger’ında confidentiality=false’tur. Signature integrity/authenticity profile’ına katkı yapabilir, fakat payload’ın okunamaması veya logout revocation garantisi vermez.

    Verification observation
    JWS confidentiality=false
    Key/lifecycle review
    Protection ve lifecycle ayrı
    Evidence conclusion
    Current acceptance bilinmiyor
  5. JWE issuer kanıtı diye genişletilmedi

    JWE authenticated encryption taşır, ancak issuer identity yine profile’a bağlıdır. Encryption sonucu key source, purpose veya current revocation gözlemlerini tamamlamaz.

    Verification observation
    JWE protection sınıfı biliniyor
    Key/lifecycle review
    Issuer profile ayrıca gerekir
    Evidence conclusion
    UNKNOWN: current revocation
  6. Lifecycle hükmü bilinmeyen state’i korudu

    Bu artifact policy sınırlarını gösterir; actualRevocationService=false’tur. Aktif key veya logout ifadesinden bütün consumer’ların token’ı şimdi kabul veya reject ettiği sonucu verilmez.

    Verification observation
    Known: lifecycle policy boundaries
    Key/lifecycle review
    No runtime revocation observation
    Evidence conclusion
    UNKNOWN: consumer acceptance

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Verifier kararını alanlara ayır

Accepted/denied yanında profile ID, yapılandırılmış issuer, audience eşleşmesi, purpose/type eşleşmesi, subject mapping, key alias/state, cryptographic validation sonucu ve time gate reason birlikte gözlenir. Raw token, kişisel payload verisi ve private key log’a yazılmaz. Decode kaydı olumlu verification değildir; upstream 401 veya cache miss de tek başına key compromise göstermez. Normal referans active key, doğru recipient/purpose ve sınırlı time aralığıdır. Unknown key, invalid signature ve retired key aynı reason’da birleştirilmez. Trusted kaynağın freshness ve refresh sonucu aynı operation’a bağlanır. Bu örnekte denial’ın görünür sınırı resource’a mesaj gönderilmemesi ve title body üretilmemesidir; gerçek service’in event alanları bu ledger’dan varsayılmaz.

Rotation ve acceptance regression birlikte yürür

Acceptance policy version’ını issuer-key provenance ile birlikte yönet. Routine rotation için eski key’in verification overlap süresini, maximum token lifetime’ı ve cache refresh sınırını tanımla; emergency revoke için ayrı karar gerekir. Signature doğruyken yanlış audience/purpose, now=exp, now=nbf ve retired key sonuçlarını ayrı regression case’lerle kontrol et. Unavailable kanıt nedeniyle fail-closed davranmak, request’i saldırı olarak tanımlamakla aynı şey değildir. Library, profile’ın unknown header, critical extension ve nested crypto kurallarını desteklemelidir. Bir signature primitive’inin public note bytes üzerinde çalışması JWT/JWS acceptance kurallarını veya JWKS lifecycle’ını doğrulamaz. Session logout için gereken server state veya revocation kontrolü ayrıca tasarlanır; JWT biçimi kendi başına dağıtık revocation sağlamaz.

ŞİMDİ VAKAYA UYGULA

Signature, key lifecycle ve purpose nasıl bağlanır?

Not okuma profile’ı approved issuer, key state ve purpose koşullarını birlikte ister. Unknown key sonucu forging veya current revocation sonucu değildir.

Vakadaki doğrulanmış actor, tenant ilişkisi ve requested action için gereken kararları ayır. Authentication veya proof başarısını object permission yerine kullanma.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Token acceptance defteri

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "profile": {
    "issuer": "https://identity.example.org",
    "audience": "atlas-notes-api",
    "purpose": "notes-read",
    "typ": "atlas-notes+jwt",
    "allowedAlgorithms": [
      "RS256"
    ],
    "subject": "Duru",
    "now": 1700000100,
    "clockSkewSeconds": 0,
    "requiredClaims": [
      "iss",
      "sub",
      "aud",
      "exp",
      "nbf",
      "iat",
      "purpose"
    ],
    "actualJWT": false,
    "actualJWKS": false,
    "actualNetwork": false,
    "actualRevocationService": false,
    "publicNoteReadPermissionDeclared": true,
    "noteId": "note-A"
  },
  "formatLedger": [
    {
      "format": "JWT",
      "content": "claims set",
      "protection": "selected JWS or JWE profile; not implied by decode"
    },
    {
      "format": "JWS Compact",
      "parts": [
        "protected-header",
        "payload",
        "signature-or-MAC"
      ],
      "confidentiality": false
    },
    {
      "format": "JWE Compact",
      "parts": [
        "protected-header",
        "encrypted-key",
        "iv",
        "ciphertext",
        "authentication-tag"
      ],
      "protection": "authenticated encryption; issuer identity still profile-bound"
    }
  ],
  "keys": [
    {
      "kid": "key-v2",
      "issuer": "https://identity.example.org",
      "algorithm": "RS256",
      "use": "sig",
      "state": "active",
      "verifyUntil": 1700000600
    },
    {
      "kid": "key-v1",
      "issuer": "https://identity.example.org",
      "algorithm": "RS256",
      "use": "sig",
      "state": "retired",
      "verifyUntil": 1700000090
    }
  ],
  "rows": [
    {
      "case": "normal",
      "header": {
        "typ": "atlas-notes+jwt",
        "alg": "RS256",
        "kid": "key-v2"
      },
      "claims": {
        "iss": "https://identity.example.org",
        "sub": "Duru",
        "aud": [
          "atlas-notes-api"
        ],
        "exp": 1700000300,
        "nbf": 1700000000,
        "iat": 1700000000,
        "purpose": "notes-read"
      },
      "signatureVerifiedDeclared": true,
      "expectedAccepted": true,
      "reason": "accepted",
      "expectedBody": {
        "title": "Tea & Bread"
      },
      "expectedResourceDelivery": true,
      "expectedMutation": false
    },
    {
      "case": "wrong-purpose",
      "header": {
        "typ": "atlas-notes+jwt",
        "alg": "RS256",
        "kid": "key-v2"
      },
      "claims": {
        "iss": "https://identity.example.org",
        "sub": "Duru",
        "aud": [
          "atlas-notes-api"
        ],
        "exp": 1700000300,
        "nbf": 1700000000,
        "iat": 1700000000,
        "purpose": "preview-render"
      },
      "signatureVerifiedDeclared": true,
      "expectedAccepted": false,
      "reason": "purpose",
      "expectedBody": null,
      "expectedResourceDelivery": false,
      "expectedMutation": false
    },
    {
      "case": "retired-key",
      "header": {
        "typ": "atlas-notes+jwt",
        "alg": "RS256",
        "kid": "key-v1"
      },
      "claims": {
        "iss": "https://identity.example.org",
        "sub": "Duru",
        "aud": [
          "atlas-notes-api"
        ],
        "exp": 1700000300,
        "nbf": 1700000000,
        "iat": 1700000000,
        "purpose": "notes-read"
      },
      "signatureVerifiedDeclared": true,
      "expectedAccepted": false,
      "reason": "key-retired",
      "expectedBody": null,
      "expectedResourceDelivery": false,
      "expectedMutation": false
    },
    {
      "case": "unknown-key",
      "header": {
        "typ": "atlas-notes+jwt",
        "alg": "RS256",
        "kid": "key-unlisted"
      },
      "claims": {
        "iss": "https://identity.example.org",
        "sub": "Duru",
        "aud": [
          "atlas-notes-api"
        ],
        "exp": 1700000300,
        "nbf": 1700000000,
        "iat": 1700000000,
        "purpose": "notes-read"
      },
      "signatureVerifiedDeclared": null,
      "expectedAccepted": false,
      "reason": "key-unavailable",
      "expectedBody": null,
      "expectedResourceDelivery": false,
      "expectedMutation": false
    }
  ],
  "timeRows": [
    {
      "now": 1700000000,
      "nbf": 1700000000,
      "exp": 1700000300,
      "expected": true
    },
    {
      "now": 1699999999,
      "nbf": 1700000000,
      "exp": 1700000300,
      "expected": false
    },
    {
      "now": 1700000300,
      "nbf": 1700000000,
      "exp": 1700000300,
      "expected": false
    }
  ],
  "lifecycle": {
    "signingKey": "key-v2",
    "oldKeyOverlapIsConfiguredNotUniversal": true,
    "unknownKeyRefresh": "bounded trusted-source refresh; unavailable is no acceptance evidence",
    "logoutMeansAutomaticJWTRevocation": false,
    "compromiseRequiresExplicitRevocationPolicy": true,
    "untrustedHeaderURLFetched": false
  },
  "boundaries": {
    "decodedClaimsTrusted": false,
    "signatureGrantsAllActions": false,
    "jweProvesIssuerByItself": false,
    "kidIsTrustAnchor": false,
    "unavailableKeyProvesForgery": false
  },
  "audienceRows": [
    {
      "aud": [
        "atlas-notes-api"
      ],
      "expected": true
    },
    {
      "aud": "atlas-notes-api",
      "expected": true
    },
    {
      "aud": [
        "book-preview"
      ],
      "expected": false
    },
    {
      "aud": [],
      "expected": false
    }
  ]
}
formatLedger
Claims ile cryptographic container ayrımı.
profile
Consumer’ın required acceptance koşulları.
keys
Trusted alias, use ve lifecycle bilgisi; secret yok.
rows
Declared crypto sonucu ve bağımsız acceptance sonuçları.
timeRows
NumericDate zero-skew eşitlik sınırları.

Header, claim ve key alias’larından oluşan acceptance tablosudur; gerçek JWT parser, signature verification veya JWKS fetch sonucu değildir. Clock skew kabul edilmez ve key policy bu örneğin application profile’ına aittir.

İki yanlış kanı

Signature valid ise token her API’de geçerlidir.

Audience, purpose/profile, time ve key policy ayrıca kabul edilmelidir.

Unknown kid token forgery’yi kanıtlar.

Key availability/provenance eksikliği kabulü engeller; root cause ayrıca incelenir.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Signature doğrulaması true olarak verilmiş, fakat purpose=preview-render; beklenen notes-read. Note body açılır mı?

  1. Hayır. Reason purpose; expectedBody=null.
  2. Evet. Signature bütün purpose ve action’ları onaylar.
Gerekçeli cevabı oku

Hayır. Reason purpose; expectedBody=null. — Bu profile purpose eşleşmesini zorunlu kılar. Geçerli signature başka bir amaç için verilen token’ı notes-read grant’ine dönüştürmez.

Key bulunamıyor ve signatureVerifiedDeclared=null. Bu kayıt token’ın forgery olduğunu kanıtlar mı?

Dersten seçilen artifact alanları; öğretim örneği

rows[3].header.kid
key-unlisted
rows[3].signatureVerifiedDeclared
null
rows[3].reason
key-unavailable
rows[3].expectedResourceDelivery
false
boundaries.unavailableKeyProvesForgery
false
  1. Evet. Bilinmeyen kid her zaman kanıtlanmış forgery’dir.
  2. Hayır. Kabul edilmez, fakat forgery kanıtlanmış değildir.
Gerekçeli cevabı oku

Hayır. Kabul edilmez, fakat forgery kanıtlanmış değildir. — key-unavailable nedeniyle delivery durur. unavailableKeyProvesForgery=false; signature sonucu bilinmiyor.

JWS Compact confidentiality sağlamıyor; JWE encrypted olsa da issuer identity profile’a bağlı. Key rotation ve logout için hangi ayrı kararlar gerekir?

Gerekçeli cevabı oku

Claims’i decode etmek güvenilen identity kurmaz. JWS signature/MAC sağlar, confidentiality değil; JWE authenticated encryption kullansa da issuer kabulü profile koşullarını ister. Key state ve verifyUntil tanımlı lifecycle policy’siyle değerlendirilir; eski key overlap süresi evrensel değildir. Logout, bütün JWT’leri kendiliğinden revoke etmez. Güncel revocation ve resource policy’si ayrı gerekir. Bu ledger gerçek JWT/JWKS veya revocation service çalıştırmaz.

□ Decode, signature ve encryption rollerini ayırdım.

□ Rotation veya logout’tan evrensel revocation sonucu çıkarmadım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam