WEB / WEB-15.S02
SAML federation modeline giriş
IdP authentication sonucunu SP’nin transaction, recipient ve signature context’ine bağla.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Normal SSO
- SP request hazır
SP request-A’yı initiating browser context’ine bağladı; IdP ve ACS registration bu sentetik profilde önceden seçilidir.
- Atlas SP
- Request-A pending; no session
- Browser
- Normal login navigation
- IdP
- Configured IdP; no request
- Redirect browser’da
SP’nin normal redirect response’u browser’a ulaştı; declared AuthnRequest navigation hedefi registered IdP’dir.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Configured IdP; no request
- AuthnRequest IdP’de
Browser’ın normal navigation request’i IdP’ye ulaştı; request-A ve SP context’i alındı, authentication local adımdır.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Request-A received; pending
- IdP local authentication
Declared IdP authentication tamamlandı ve selected assertion/response hazırlandı; gerçek XML veya signature byte’ı üretilmez.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Response-A + assertion-A ready
- POST form browser’da
IdP’nin normal HTTP response’u browser’a ulaştı; ACS’ye gönderilecek form selected response alias’ını taşır.
- Atlas SP
- Request-A pending; no session
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Response ACS’ye ulaştı
Browser’ın normal POST request’i ACS’ye ulaştı; response/assertion alındı ama SP validation ve session hâlâ pending’dir.
- Atlas SP
- Response received; validation pending
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- SP local validation
Atlas SP için issuer/key ve aynı verified/consumed node koşulları uygundur. Audience Atlas entity ID’sini içerir; ACS, request-A ve browser-A bağları eşleşir. now=1050 hem Conditions [1000,1100) hem confirmation <1080 sınırındadır; selected validation kabul edilir.
- Atlas SP
- All selected gates valid
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Local session sonucu
Bütün seçili assertion/context koşulları geçti; SP kendi yeni local session’ını oluşturur, pending request’i tüketir ve assertion kullanımını confirmation validity süresince izler. Browser’a session response’u bu sahnede dönmez; IdP session ve resource policy ayrı kalır.
- Atlas SP
- New SP session; request consumed
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
Audience deny
- SP request hazır
SP request-A’yı initiating browser context’ine bağladı; IdP ve ACS registration bu sentetik profilde önceden seçilidir.
- Atlas SP
- Request-A pending; no session
- Browser
- Normal login navigation
- IdP
- Configured IdP; no request
- Redirect browser’da
SP’nin normal redirect response’u browser’a ulaştı; declared AuthnRequest navigation hedefi registered IdP’dir.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Configured IdP; no request
- AuthnRequest IdP’de
Browser’ın normal navigation request’i IdP’ye ulaştı; request-A ve SP context’i alındı, authentication local adımdır.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Request-A received; pending
- IdP local authentication
Declared IdP authentication tamamlandı ve selected assertion/response hazırlandı; gerçek XML veya signature byte’ı üretilmez.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Response-A + assertion-A ready
- POST form browser’da
IdP’nin normal HTTP response’u browser’a ulaştı; ACS’ye gönderilecek form selected response alias’ını taşır.
- Atlas SP
- Request-A pending; no session
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Response ACS’ye ulaştı
Browser’ın normal POST request’i ACS’ye ulaştı; response/assertion alındı ama SP validation ve session hâlâ pending’dir.
- Atlas SP
- Response received; validation pending
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- SP local validation
Assertion audience restriction yalnız catalog SP entity ID’sini içerir; Atlas entity ID’si bu restriction’ı sağlamaz. Doğru ACS, signature ve now=1050 bu farklı recipient bağını telafi etmez. SP validation’ı audience nedeniyle reddeder.
- Atlas SP
- Audience mismatch
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Local session sonucu
Yalnız bütün selected koşullar geçerse SP session yaratılır; failure branch’lerinde receipt olmuş olsa da session oluşmaz.
- Atlas SP
- No SP session; denied
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
Time deny
- SP request hazır
SP request-A’yı initiating browser context’ine bağladı; IdP ve ACS registration bu sentetik profilde önceden seçilidir.
- Atlas SP
- Request-A pending; no session
- Browser
- Normal login navigation
- IdP
- Configured IdP; no request
- Redirect browser’da
SP’nin normal redirect response’u browser’a ulaştı; declared AuthnRequest navigation hedefi registered IdP’dir.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Configured IdP; no request
- AuthnRequest IdP’de
Browser’ın normal navigation request’i IdP’ye ulaştı; request-A ve SP context’i alındı, authentication local adımdır.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Request-A received; pending
- IdP local authentication
Declared IdP authentication tamamlandı ve selected assertion/response hazırlandı; gerçek XML veya signature byte’ı üretilmez.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Response-A + assertion-A ready
- POST form browser’da
IdP’nin normal HTTP response’u browser’a ulaştı; ACS’ye gönderilecek form selected response alias’ını taşır.
- Atlas SP
- Request-A pending; no session
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Response ACS’ye ulaştı
Browser’ın normal POST request’i ACS’ye ulaştı; response/assertion alındı ama SP validation ve session hâlâ pending’dir.
- Atlas SP
- Response received; validation pending
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- SP local validation
now=1080, Conditions bitişi 1100’den erkendir; fakat bearer confirmation NotOnOrAfter=1080 eşitlik anını dışlar. SP’ye mesaj varmış olsa da confirmation artık geçerli değildir. Signature ve request bağı olumlu kalırken SP time gate’inde reddeder.
- Atlas SP
- Confirmation window expired
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Local session sonucu
Yalnız bütün selected koşullar geçerse SP session yaratılır; failure branch’lerinde receipt olmuş olsa da session oluşmaz.
- Atlas SP
- No SP session; denied
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
Node deny
- SP request hazır
SP request-A’yı initiating browser context’ine bağladı; IdP ve ACS registration bu sentetik profilde önceden seçilidir.
- Atlas SP
- Request-A pending; no session
- Browser
- Normal login navigation
- IdP
- Configured IdP; no request
- Redirect browser’da
SP’nin normal redirect response’u browser’a ulaştı; declared AuthnRequest navigation hedefi registered IdP’dir.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Configured IdP; no request
- AuthnRequest IdP’de
Browser’ın normal navigation request’i IdP’ye ulaştı; request-A ve SP context’i alındı, authentication local adımdır.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Request-A received; pending
- IdP local authentication
Declared IdP authentication tamamlandı ve selected assertion/response hazırlandı; gerçek XML veya signature byte’ı üretilmez.
- Atlas SP
- Request-A pending; no session
- Browser
- AuthnRequest navigation ready
- IdP
- Response-A + assertion-A ready
- POST form browser’da
IdP’nin normal HTTP response’u browser’a ulaştı; ACS’ye gönderilecek form selected response alias’ını taşır.
- Atlas SP
- Request-A pending; no session
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Response ACS’ye ulaştı
Browser’ın normal POST request’i ACS’ye ulaştı; response/assertion alındı ama SP validation ve session hâlâ pending’dir.
- Atlas SP
- Response received; validation pending
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- SP local validation
signedNodeAlias=assertion-A iken consumedNodeAlias=assertion-other’dır. Verilen signature sonucu yalnız doğrulanan node’un kapsamındadır; başka node’u tüketme kararını doğrulamaz. SP aynı-node bağını kabul etmez ve yeni local identity kurmaz.
- Atlas SP
- Verified/consumed node mismatch
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
- Local session sonucu
Yalnız bütün selected koşullar geçerse SP session yaratılır; failure branch’lerinde receipt olmuş olsa da session oluşmaz.
- Atlas SP
- No SP session; denied
- Browser
- ACS POST form ready
- IdP
- Response-A + assertion-A ready
ROLLER · STATE · VERİ AKIŞI
Kim konuşur, kim karar verir?
SAML federation’da IdP principal’ın authentication sonucunu assertion ile ifade eder; SP bu sonucu kendi local application context’inde değerlendiren relying party’dir. Atlas örneği SP-initiated browser SSO seçer: SP pending request-A üretir, browser request’i registered IdP’ye taşır, IdP response’u browser üzerinden SP’nin ACS endpoint’ine ulaştırır. Browser taşımaya aracılık eder; SP’nin IdP signing trust’ının sahibi olmaz. Local SP session, IdP session’dan ayrı kurulur.
Response ID’si response-A, içindeki assertion ID’si assertion-A’dır; bunlar aynı field değildir. Assertion, issuer, subject, AuthnStatement, Conditions ve bearer SubjectConfirmation içerir. Response Status=Success tek başına local login accept anlamına gelmez. SP selected profile’ın issuer, signature coverage, audience, recipient, time ve request correlation koşullarını birlikte okur. Tablo tek bearer assertion seçer; başka profile veya unsolicited response desteği bu tercih üzerinden genellenmez.
Destination, audience ve recipient farklı bağlar
Response Destination mesajın alındığı ACS location’ıyla eşleşir; bearer Recipient assertion’ın confirmation hedefi ACS URL’sidir. Audience ise SP’nin unique entity identifier’ıdır; ACS URL’siyle aynı olmak zorunda değildir. Response ve bearer InResponseTo selected request-A’ya bağlıdır. SP ayrıca kendi pending request ve browser context’ini korur. Core’daki optional field genel tanımı ile bu SP-initiated selected profile’ın correlation gereksinimini karıştırma; unsolicited akışın ayrı kuralları vardır ve burada kabul edilmez.
Conditions NotBefore başlangıcı dahil, NotOnOrAfter bitişi hariç bir zaman aralığı verir. Bearer SubjectConfirmationData’nın kendi NotOnOrAfter sınırı da RP’nin confirmation anında geçerli olmalıdır; bu field yalnız browser delivery deadline’ı değildir. Bearer data’ya NotBefore eklenmez. Örnekte Conditions [1000,1100), confirmation before 1080 ve clock skew=0 seçilmiştir; now=1080 confirmation gate’inde deny olur. Gerçek deployment clock skew policy’sini açıkça yönetir; daha erken response receipt geç gelen validation’ı otomatik geçerli yapmaz.
İmza hangi business verisini korur?
POST profile’ın onaylı E26 errata’sı her assertion’ın digital signature ile korunmasını ister; bunu assertion’ı ayrı imzalayarak veya onu kapsayan Response’u imzalayarak sağlamak mümkündür. Burada individual assertion coverage seçiyoruz. Signature validation’ın trusted IdP key’i, accepted algorithm ve verified node kapsamı bilinmelidir; mesajın içindeki certificate/KeyInfo kendiliğinden trust anchor olmaz. Business identity, gerçekten doğrulanan ve policy’si değerlendirilen node’dan okunmalıdır.
signedNodeAlias ile consumedNodeAlias aynı node’u göstermiyorsa signature valid declared olsa bile local accept üretmeyiz. Bu iki alias XML, certificate veya gerçek signature değildir; parsed business node binding’ini anlatan inert typed ledger’dır. NameID mapping’i trusted issuer ve identifier format/qualifier anlaşmasına bağlıdır; yalnız display name veya email benzerliğinden local account üretilmez. Login acceptance da application role, tenant ve resource authorization’ını otomatik vermez.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
SP farklı
- SAML relying-party context’i seçildi
Profile SP-initiated, tek bearer assertion ve unsolicitedAccepted=false seçer. Response Destination Atlas ACS olsa da assertion’ın recipient, audience ve request bağı ayrıca değerlendirilir.
- SAML profile
- case=audience-denied
- Assertion context validation
- Assertion gate okunmadı
- SP session boundary
- SP session yok
- Declared signature ile trusted provenance ayrıldı
cryptographicValidDeclared=true, keyProvenanceDeclared=true ve selectedCoverage=individual-assertion verilmiştir. Mesajdaki certificate tek başına trust anchor değildir; verified node’un hangi veri olduğu korunur.
- SAML profile
- case=audience-denied
- Assertion context validation
- Individual assertion signature predicate
- SP session boundary
- SP session yok
- Tüketim veya audience gate’i uygulandı
Audience restriction yalnız https://catalog.example.org/saml/entity içerir. Atlas SP entity ID’si burada yoktur; doğru ACS destination farklı intended SP’yi kabul ettirmez.
- SAML profile
- case=audience-denied
- Assertion context validation
- Intended audience ≠ Atlas SP
- SP session boundary
- SP session yok
- Diğer olumlu gates ret’i değiştirmedi
now=1050, pending request-A ve browser-A uygun kalır. Olumlu correlation ve time predicate’leri failed audience gate’ini telafi etmez.
- SAML profile
- case=audience-denied
- Assertion context validation
- Context/time valid; selected gate failed
- SP session boundary
- SP session yok
- Local session kabulü durduruldu
Expected=false’tur; bu assertion üzerinden yeni SP session oluşturulmaz. NameID metni veya AuthnStatement varlığı, failed context gate’i aşmak için local identity proof sayılmaz.
- SAML profile
- case=audience-denied
- Assertion context validation
- Selected validation denied
- SP session boundary
- No new SP session
- Typed ledger güven sınırı korundu
Bu branch association ve intended-recipient sınırını açıklar; gerçek XML signature veya parser işlemi çalıştırmaz. Attribute/role/tenant authorization, accepted authentication sonrasında da ayrı policy’dir.
- SAML profile
- case=audience-denied
- Assertion context validation
- Known: selected gate denial
- SP session boundary
- No broadened local authority
Node bağı farklı
- SAML relying-party context’i seçildi
Profile SP-initiated, tek bearer assertion ve unsolicitedAccepted=false seçer. Response Destination Atlas ACS olsa da assertion’ın recipient, audience ve request bağı ayrıca değerlendirilir.
- SAML profile
- case=node-denied
- Assertion context validation
- Assertion gate okunmadı
- SP session boundary
- SP session yok
- Declared signature ile trusted provenance ayrıldı
cryptographicValidDeclared=true, keyProvenanceDeclared=true ve selectedCoverage=individual-assertion verilmiştir. Mesajdaki certificate tek başına trust anchor değildir; verified node’un hangi veri olduğu korunur.
- SAML profile
- case=node-denied
- Assertion context validation
- Individual assertion signature predicate
- SP session boundary
- SP session yok
- Tüketim veya audience gate’i uygulandı
signedNodeAlias=assertion-A, consumedNodeAlias=assertion-other’dır. Bir node için signature success, başka business node’un identity/conditions verisini doğrulamaz.
- SAML profile
- case=node-denied
- Assertion context validation
- Verified node ≠ consumed node
- SP session boundary
- SP session yok
- Diğer olumlu gates ret’i değiştirmedi
now=1050, pending request-A ve browser-A uygun kalır. Olumlu correlation ve time predicate’leri failed node association gate’ini telafi etmez.
- SAML profile
- case=node-denied
- Assertion context validation
- Context/time valid; selected gate failed
- SP session boundary
- SP session yok
- Local session kabulü durduruldu
Expected=false’tur; bu assertion üzerinden yeni SP session oluşturulmaz. NameID metni veya AuthnStatement varlığı, failed context gate’i aşmak için local identity proof sayılmaz.
- SAML profile
- case=node-denied
- Assertion context validation
- Selected validation denied
- SP session boundary
- No new SP session
- Typed ledger güven sınırı korundu
Bu branch association ve intended-recipient sınırını açıklar; gerçek XML signature veya parser işlemi çalıştırmaz. Attribute/role/tenant authorization, accepted authentication sonrasında da ayrı policy’dir.
- SAML profile
- case=node-denied
- Assertion context validation
- Known: selected gate denial
- SP session boundary
- No broadened local authority
VARSAYIM · SINIR · KONTROL
Valid assertion yanlış bağlamda kullanılamaz
Audience-denied branch’inde response doğru ACS’ye gelir, issuer ve signature fixture’ı doğru kalır, fakat assertion catalog SP’ye yöneliktir. Atlas kendi entity ID’sini audience restriction’da bulamadığı için local session yaratmaz. Bir restriction içindeki Audience’lar OR, farklı restriction grupları AND’dır; hepsini tek büyük allowlist’e dökmek kısıtı değiştirir. Bu, transport veya XML format hatası değil, intended relying party bağının başarısızlığıdır.
Expired branch’inde Conditions henüz bitmemişken now=1080, bearer confirmation sınırına eşittir. SP receipt state’i gösterildikten sonra local time gate deny üretir. Request-B correlation, başka browser alias’ı veya daha önce kullanılmış assertion ID de ayrı context sorularıdır. Profile’ın valid signatures kontrolü bu koşulları atlamaya izin vermez; ilk başarısız gate ve hangi local state’in oluşmadığı kanıtta ayrı görünmelidir.
Signature sonucu node seçimini örtmez
Node-denied branch’i yalnız typed ledger’da verified assertion-A ile business consumer’ın assertion-other referansını ayırır. İçinde XML signing örneği, parser manipulation veya yeniden üretim akışı yoktur. Öğrenilecek varsayım şudur: “bir signature doğrulandı” sonucu hangi issuer/subject/condition node’u için geçerliydi? Key provenance, coverage ve aynı node’un tüketilmesi kaybolursa identity kararı kendi kanıtından kopar. Signed XML integrity sağlar; attribute doğruluğu ve local role policy’si ayrıca değerlendirilir.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Confirmation time
- Bearer confirmation penceresi seçildi
Normal Conditions NotBefore=1000 ve NotOnOrAfter=1100’dür. Bearer SubjectConfirmation ise NotOnOrAfter=1080 taşır; iki pencere ayrı gate’tir.
- SAML decision ledger
- Conditions + confirmation
- Time/correlation review
- Time karşılaştırılmadı
- SP evidence conclusion
- Acceptance bilinmiyor
- Seçilen clock profile okundu
clockSkew=0’dır; integer değerler synthetic UTC timeline offsets’tir. Bunlar wire xs:dateTime string’leri veya production clock ölçümü değildir.
- SAML decision ledger
- Clock skew=0
- Time/correlation review
- Synthetic UTC offsets
- SP evidence conclusion
- Acceptance bilinmiyor
- İlk ve son uygun anlar karşılaştırıldı
now=1000 NotBefore equality’de uygundur; now=1079 her iki upper bound’un önündedir. Bu satırlar time gate için olumlu kontrollerdir.
- SAML decision ledger
- 1000 and 1079 eligible
- Time/correlation review
- Time expected=true
- SP evidence conclusion
- Other validation gates separate
- Erken upper bound equality’de kapandı
now=1080’de Conditions hâlâ 1100 önündedir, fakat bearer confirmation NotOnOrAfter eşitliği acceptance’ı durdurur. Confirmation window yalnız delivery süresi gibi yorumlanmaz.
- SAML decision ledger
- now=1080
- Time/correlation review
- Conditions valid; confirmation expired
- SP evidence conclusion
- Time acceptance=false
- Time denial diğer gates’le karışmadı
Expired row’da signature ve request context olumlu kalır. Bu nedenle reason confirmation expiry’dir; yanlış issuer, password veya audience failure diye yeniden adlandırılmaz.
- SAML decision ledger
- Known: expired confirmation
- Time/correlation review
- Signature/context predicates unchanged
- SP evidence conclusion
- No inferred issuer compromise
- Time kanıtı profile scope’unda kaldı
Bu fixture’ın time expected sonuçları açıklanır. Clock synchronization, çoklu assertions/confirmations ve actual SP acceptance ayrı evidence ister; new local session burada doğrulanmaz.
- SAML decision ledger
- Known: selected time boundaries
- Time/correlation review
- Clock/runtime evidence ayrı
- SP evidence conclusion
- UNKNOWN: actual SP session
Request binding
- Pending request scope seçildi
Pending request-A browser-A’ya bağlıdır. Response InResponseTo ile bearer SubjectConfirmation InResponseTo aynı kararın ayrı correlation alanlarıdır.
- SAML decision ledger
- request-A / browser-A
- Time/correlation review
- Correlation okunmadı
- SP evidence conclusion
- Local session bilinmiyor
- Normal binding satırı okundu
responseRequest=request-A, subjectRequest=request-A, browserAlias=browser-A ve pending=true satırı expected=true verir. Tek request alanı eşleşmesi yeterli diye daraltılmaz.
- SAML decision ledger
- Both request links match
- Time/correlation review
- Browser/pending match
- SP evidence conclusion
- Correlation expected=true
- Response ve subject mismatch ayrıldı
Response request-B veya subject request-B olan iki ayrı satır expected=false’tur. Birinin eşleşmesi diğer mismatch’i telafi etmez; iki alan tek join’e yassılaştırılmaz.
- SAML decision ledger
- Distinct mismatch rows
- Time/correlation review
- Either request mismatch denies
- SP evidence conclusion
- Correlation expected=false
- Initiating browser scope’u korundu
İki request alanı eşleşse de browserAlias=browser-B satırı expected=false’tur. Request-A’nın görünmesi farklı browser context’inde local session acceptance üretmez.
- SAML decision ledger
- Request links match
- Time/correlation review
- Browser B ≠ pending Browser A
- SP evidence conclusion
- Correlation expected=false
- Audience grouping ayrı okundu
Bir AudienceRestriction içindeki entity IDs OR, farklı restrictions AND ile değerlendirilir. Correlation başarısı bu intended-SP kuralını tamamlamaz; ayrı audience evidence gerekir.
- SAML decision ledger
- Correlation policy known
- Time/correlation review
- Audience groups: OR within, AND across
- SP evidence conclusion
- Other gates remain separate
- Local session hükmü genişletilmedi
Correlation matrix yalnız request ve browser bağının eşleşmesini gösterir. Issuer, signature coverage, tüketilen node, audience/recipient ve zaman koşulları ayrıca gereklidir; bunlar olmadan SP authentication kabulü çıkarılmaz. Local role ve resource izni ise authentication’dan ayrı application policy’sidir.
- SAML decision ledger
- Known: typed correlation rules
- Time/correlation review
- Other gate evidence required
- SP evidence conclusion
- UNKNOWN: actual SP acceptance
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Trust configuration mesajdan önce gelir
Atlas selected IdP entity ID, SP entity ID, ACS URL ve signing key provenance’ını configuration’da ayırır. Current library algorithm policy’si kullanılır; 2005 standardındaki tarihsel signature algorithm önerilerini güncel deployment default’u diye taşımayız. XML parser/schema/ID uniqueness, signature validation ve business node seçimi reviewed library sınırında birlikte tutulur. Unknown schema veya mesajın taşıdığı yeni key referansı otomatik network trust kaynağı değildir.
Pending request ledger’ı request ID ve initiating browser context’ini bağlar. Selected bearer assertion’ın issuer, signature coverage, Conditions, audience, recipient ve InResponseTo’su local gate’te doğrulanmadan session yaratılmaz. Birden fazla assertion varsa her biri bağımsız değerlendirilmeli; bearer confirmation alternatiflerinden profile’a uygun bir tanesinin geçmesi yeterli olabilir. Buradaki tek assertion/tek confirmation profili bu çokluk kurallarını uyguladığını iddia etmez.
Session creation ile reusable assertion ayır
Normal branch’te bütün selected gate’ler geçtikten sonra SP yeni local session oluşturur; request state’i tüketilir ve used assertion ID confirmation validity boyunca tutulur. POST profile bunu bearer reuse kontrolü için ister; storage concurrency ve clock policy gerçek üründe ayrıca doğrulanır. Assertion’ın accept edilmesi SP session’ını sonsuz yapmaz; local session lifetime ve varsa AuthnStatement SessionNotOnOrAfter bağlamı ayrı izlenir.
Normal akışı audience, confirmation süresi ve node bağı nedeniyle reddedilen dallarla karşılaştır. Response ve bearer InResponseTo alanları aynı pending request’e, browser context’i de aynı başlatana bağlı olmalıdır. Tablo bu karar koşullarını alias ve zaman değerleriyle gösterir; gerçek XML canonicalization, digital signature, parser, SAML binding, IdP/SP, browser form veya persistent session davranışı bu alanlardan doğrulanmış sayılmaz. Authentication kabul edilse de application’ın tenant ve record policy’si kendi sahibinde ayrıca uygulanır.
ŞİMDİ VAKAYA UYGULA
Signature success hangi context gate’lerini tamamlamaz?
Atlas’ın tek bearer assertion profile’ı audience, same verified node, request/browser binding ve iki time window ister. Typed ledger gerçek XML runtime değildir.
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
SAML response/assertion context ledger’ı
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"protocol": "SAML 2.0",
"selected": "SP-initiated Web Browser SSO; abstract Redirect request / POST response",
"idpEntityId": "https://identity.example.org/saml",
"spEntityId": "https://atlas.example.org/saml/entity",
"acsURL": "https://atlas.example.org/saml/acs",
"oneBearerAssertion": true,
"unsolicitedAccepted": false,
"noActualXML": true,
"noActualSignature": true,
"noActualNetwork": true,
"algorithmPolicy": "Configured current library policy; no legacy 2005 algorithm recommendation adopted",
"normalIdpAuthenticationDeclared": true,
"acsRegistrationCheckedDeclared": true
},
"normal": {
"response": {
"ID": "response-A",
"Version": "2.0",
"Issuer": "https://identity.example.org/saml",
"InResponseTo": "request-A",
"Destination": "https://atlas.example.org/saml/acs",
"Status": "Success"
},
"assertion": {
"ID": "assertion-A",
"Issuer": "https://identity.example.org/saml",
"NameID": {
"format": "persistent",
"value": "subject-A",
"nameQualifier": "https://identity.example.org/saml",
"spNameQualifier": "https://atlas.example.org/saml/entity"
},
"AuthnStatementPresent": true,
"Conditions": {
"NotBefore": 1000,
"NotOnOrAfter": 1100,
"AudienceRestrictions": [
[
"https://atlas.example.org/saml/entity"
]
]
},
"SubjectConfirmation": {
"method": "bearer",
"Recipient": "https://atlas.example.org/saml/acs",
"InResponseTo": "request-A",
"NotOnOrAfter": 1080
}
},
"signature": {
"selectedCoverage": "individual-assertion",
"signedNodeAlias": "assertion-A",
"consumedNodeAlias": "assertion-A",
"trustedKeyAlias": "configured-idp-signing-key",
"keyProvenanceDeclared": true,
"cryptographicValidDeclared": true,
"schemaAndUniqueIdsDeclared": true
},
"context": {
"now": 1050,
"clockSkew": 0,
"pendingRequestId": "request-A",
"browserAlias": "browser-A",
"pendingBrowserAlias": "browser-A",
"pending": true,
"assertionPreviouslyUsed": false
}
},
"cases": [
{
"case": "normal",
"ledger": {
"response": {
"ID": "response-A",
"Version": "2.0",
"Issuer": "https://identity.example.org/saml",
"InResponseTo": "request-A",
"Destination": "https://atlas.example.org/saml/acs",
"Status": "Success"
},
"assertion": {
"ID": "assertion-A",
"Issuer": "https://identity.example.org/saml",
"NameID": {
"format": "persistent",
"value": "subject-A",
"nameQualifier": "https://identity.example.org/saml",
"spNameQualifier": "https://atlas.example.org/saml/entity"
},
"AuthnStatementPresent": true,
"Conditions": {
"NotBefore": 1000,
"NotOnOrAfter": 1100,
"AudienceRestrictions": [
[
"https://atlas.example.org/saml/entity"
]
]
},
"SubjectConfirmation": {
"method": "bearer",
"Recipient": "https://atlas.example.org/saml/acs",
"InResponseTo": "request-A",
"NotOnOrAfter": 1080
}
},
"signature": {
"selectedCoverage": "individual-assertion",
"signedNodeAlias": "assertion-A",
"consumedNodeAlias": "assertion-A",
"trustedKeyAlias": "configured-idp-signing-key",
"keyProvenanceDeclared": true,
"cryptographicValidDeclared": true,
"schemaAndUniqueIdsDeclared": true
},
"context": {
"now": 1050,
"clockSkew": 0,
"pendingRequestId": "request-A",
"browserAlias": "browser-A",
"pendingBrowserAlias": "browser-A",
"pending": true,
"assertionPreviouslyUsed": false
}
},
"expected": true
},
{
"case": "audience-denied",
"ledger": {
"response": {
"ID": "response-A",
"Version": "2.0",
"Issuer": "https://identity.example.org/saml",
"InResponseTo": "request-A",
"Destination": "https://atlas.example.org/saml/acs",
"Status": "Success"
},
"assertion": {
"ID": "assertion-A",
"Issuer": "https://identity.example.org/saml",
"NameID": {
"format": "persistent",
"value": "subject-A",
"nameQualifier": "https://identity.example.org/saml",
"spNameQualifier": "https://atlas.example.org/saml/entity"
},
"AuthnStatementPresent": true,
"Conditions": {
"NotBefore": 1000,
"NotOnOrAfter": 1100,
"AudienceRestrictions": [
[
"https://catalog.example.org/saml/entity"
]
]
},
"SubjectConfirmation": {
"method": "bearer",
"Recipient": "https://atlas.example.org/saml/acs",
"InResponseTo": "request-A",
"NotOnOrAfter": 1080
}
},
"signature": {
"selectedCoverage": "individual-assertion",
"signedNodeAlias": "assertion-A",
"consumedNodeAlias": "assertion-A",
"trustedKeyAlias": "configured-idp-signing-key",
"keyProvenanceDeclared": true,
"cryptographicValidDeclared": true,
"schemaAndUniqueIdsDeclared": true
},
"context": {
"now": 1050,
"clockSkew": 0,
"pendingRequestId": "request-A",
"browserAlias": "browser-A",
"pendingBrowserAlias": "browser-A",
"pending": true,
"assertionPreviouslyUsed": false
}
},
"expected": false
},
{
"case": "expired",
"ledger": {
"response": {
"ID": "response-A",
"Version": "2.0",
"Issuer": "https://identity.example.org/saml",
"InResponseTo": "request-A",
"Destination": "https://atlas.example.org/saml/acs",
"Status": "Success"
},
"assertion": {
"ID": "assertion-A",
"Issuer": "https://identity.example.org/saml",
"NameID": {
"format": "persistent",
"value": "subject-A",
"nameQualifier": "https://identity.example.org/saml",
"spNameQualifier": "https://atlas.example.org/saml/entity"
},
"AuthnStatementPresent": true,
"Conditions": {
"NotBefore": 1000,
"NotOnOrAfter": 1100,
"AudienceRestrictions": [
[
"https://atlas.example.org/saml/entity"
]
]
},
"SubjectConfirmation": {
"method": "bearer",
"Recipient": "https://atlas.example.org/saml/acs",
"InResponseTo": "request-A",
"NotOnOrAfter": 1080
}
},
"signature": {
"selectedCoverage": "individual-assertion",
"signedNodeAlias": "assertion-A",
"consumedNodeAlias": "assertion-A",
"trustedKeyAlias": "configured-idp-signing-key",
"keyProvenanceDeclared": true,
"cryptographicValidDeclared": true,
"schemaAndUniqueIdsDeclared": true
},
"context": {
"now": 1080,
"clockSkew": 0,
"pendingRequestId": "request-A",
"browserAlias": "browser-A",
"pendingBrowserAlias": "browser-A",
"pending": true,
"assertionPreviouslyUsed": false
}
},
"expected": false
},
{
"case": "node-denied",
"ledger": {
"response": {
"ID": "response-A",
"Version": "2.0",
"Issuer": "https://identity.example.org/saml",
"InResponseTo": "request-A",
"Destination": "https://atlas.example.org/saml/acs",
"Status": "Success"
},
"assertion": {
"ID": "assertion-A",
"Issuer": "https://identity.example.org/saml",
"NameID": {
"format": "persistent",
"value": "subject-A",
"nameQualifier": "https://identity.example.org/saml",
"spNameQualifier": "https://atlas.example.org/saml/entity"
},
"AuthnStatementPresent": true,
"Conditions": {
"NotBefore": 1000,
"NotOnOrAfter": 1100,
"AudienceRestrictions": [
[
"https://atlas.example.org/saml/entity"
]
]
},
"SubjectConfirmation": {
"method": "bearer",
"Recipient": "https://atlas.example.org/saml/acs",
"InResponseTo": "request-A",
"NotOnOrAfter": 1080
}
},
"signature": {
"selectedCoverage": "individual-assertion",
"signedNodeAlias": "assertion-A",
"consumedNodeAlias": "assertion-other",
"trustedKeyAlias": "configured-idp-signing-key",
"keyProvenanceDeclared": true,
"cryptographicValidDeclared": true,
"schemaAndUniqueIdsDeclared": true
},
"context": {
"now": 1050,
"clockSkew": 0,
"pendingRequestId": "request-A",
"browserAlias": "browser-A",
"pendingBrowserAlias": "browser-A",
"pending": true,
"assertionPreviouslyUsed": false
}
},
"expected": false
}
],
"audienceRows": [
{
"restrictions": [
[
"https://atlas.example.org/saml/entity",
"https://catalog.example.org/saml/entity"
]
],
"expected": true
},
{
"restrictions": [
[
"https://atlas.example.org/saml/entity"
],
[
"https://catalog.example.org/saml/entity"
]
],
"expected": false
},
{
"restrictions": [
[
"https://atlas.example.org/saml/entity"
],
[
"https://atlas.example.org/saml/entity",
"https://catalog.example.org/saml/entity"
]
],
"expected": true
}
],
"timeRows": [
{
"now": 999,
"expected": false
},
{
"now": 1000,
"expected": true
},
{
"now": 1079,
"expected": true
},
{
"now": 1080,
"expected": false
},
{
"now": 1100,
"expected": false
}
],
"correlationRows": [
{
"responseRequest": "request-A",
"subjectRequest": "request-A",
"browserAlias": "browser-A",
"pending": true,
"expected": true
},
{
"responseRequest": "request-B",
"subjectRequest": "request-A",
"browserAlias": "browser-A",
"pending": true,
"expected": false
},
{
"responseRequest": "request-A",
"subjectRequest": "request-B",
"browserAlias": "browser-A",
"pending": true,
"expected": false
},
{
"responseRequest": "request-A",
"subjectRequest": "request-A",
"browserAlias": "browser-B",
"pending": true,
"expected": false
}
],
"signatureCoverage": {
"approvedPOSTAlternatives": [
"individual-assertion",
"covering-response"
],
"selected": "individual-assertion",
"sameVerifiedNodeConsumedRequired": true,
"certificateInMessageIsTrustAnchor": false,
"xmlEncryptionProvidesSignature": false
},
"localSession": {
"createdOnlyAfterAllSelectedGates": true,
"newSessionSeparateFromIdpSession": true,
"assertionIdRetainedThroughConfirmationValidity": true,
"storageConcurrencyNotExecuted": true,
"roleOrTenantPolicySeparate": true
},
"timeNotation": "Integer offsets in a synthetic UTC teaching timeline; not wire xs:dateTime strings",
"subjectConfirmationQualification": {
"noNotBeforeInBearerData": true,
"confirmationWindowNotDeliveryOnly": true,
"multipleConfirmationsAnyValidOneForEachAssertion": true,
"multipleAssertionsIndependentlyValidated": true
}
}- profile
- SP-initiated selected binding ve trust context’leri; XML çalışmaz.
- normal.response
- Response ID, Destination ve request correlation.
- normal.assertion
- Subject, audience, Conditions ve bearer confirmation ayrı alanlardır.
- normal.signature
- Declared trusted key ve aynı verified/consumed node ilişkisi.
- timeRows
- UTC öğretim offset’leri; confirmation bitişi hariçtir.
Inert aliases ve UTC offset tablosudur; wire XML/xs:dateTime, certificate, signature, IdP authentication, browser binding veya persistent session üretmez.
İki yanlış kanı
POST response’ta her assertion ayrı imzalanmak zorundadır.
Onaylı E26, assertion’ları koruyan individual Assertion signature veya covering Response signature’a izin verir.
ACS’ye ulaşan response artık valid login’dir.
Receipt sonrası trusted issuer/key, coverage, audience, recipient, request ve time gate’leri geçmeden SP session yaratılmaz.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Conditions süresi 1100’e kadar, fakat bearer SubjectConfirmation NotOnOrAfter=1080. now=1080 ve clockSkew=0. Assertion kabul edilir mi?
- Hayır. Subject confirmation sınırına ulaşılmış.
- Evet. Conditions 1100 olduğu için bütün confirmation süreleri geçersizdir.
Gerekçeli cevabı oku
Hayır. Subject confirmation sınırına ulaşılmış. — NotOnOrAfter eşitlik anını kabul etmez. Daha uzun Conditions süresi, confirmation süresinin dolmasını geçerli yapmaz.
Bir restriction içindeki iki audience ile iki ayrı restriction neden aynı sonucu vermiyor?
Dersten seçilen artifact alanları; öğretim örneği
- audienceRows
- [{"restrictions":[["https://atlas.example.org/saml/entity","https://catalog.example.org/saml/entity"]],"expected":true},{"restrictions":[["https://atlas.example.org/saml/entity"],["https://catalog.example.org/saml/entity"]],"expected":false},{"restrictions":[["https://atlas.example.org/saml/entity"],["https://atlas.example.org/saml/entity","https://catalog.example.org/saml/entity"]],"expected":true}]
- Bütün audience listeleri düzleştirilir; herhangi tek eşleşme yeterli.
- SP her restriction’ı sağlamalı; bir restriction içindeki adaylardan biri yeterli.
Gerekçeli cevabı oku
SP her restriction’ı sağlamalı; bir restriction içindeki adaylardan biri yeterli. — Atlas ve catalog aynı restriction içindeyse Atlas eşleşir. Ayrı restriction’larda Atlas’ın yalnız catalog isteyen ikinci koşulu sağlamaması ret üretir.
Signature cryptographicValidDeclared=true. SP neden signedNodeAlias ile consumedNodeAlias, InResponseTo, Destination ve Recipient bağlarını da doğrular?
Gerekçeli cevabı oku
Güvenilen key provenance ve signature coverage gerekir; mesaj içindeki certificate kendiliğinden trust anchor olmaz. Business kararında tüketilen node, doğrulanan node’a bağlı olmalıdır. InResponseTo bekleyen request/browser transaction’ını, Destination ve Recipient doğru ACS bağını korur. Zaman, audience ve kullanım state’i de ayrıca denetlenir. SP session, IdP session’dan ayrıdır; role/tenant izni sonradan uygulanır. Bu typed ledger gerçek XML veya signature validation çalıştırmaz.
□ Signature sonucunu bütün assertion/context koşulları saymadım.
□ SP session ile IdP session ve resource iznini ayırdım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- OASIS SAML 2.0 — Assertions and Protocols, OASIS Standard§2.5.1.1–2.5.1.4 conditions/time/audience · §3.2.2 response ID, InResponseTo, Destination · §5.1–5.4 signature coverage/inheritance/reference and KeyInfo
- OASIS SAML 2.0 — Profiles, OASIS Standard§4.1.3.3–4.1.3.6 browser SSO roles and session choice · §4.1.4.1–4.1.4.3 request/response usage and processing · §4.1.4.5 POST; §4.1.5 unsolicited responses
- OASIS SAML 2.0 Approved Errata 05 — 1 May 2012Status and latest approved alias · E26 response/bearer/POST signature and processing clarification · E46 audience OR within / AND between restrictions · E52 subject confirmation time is RP confirmation window
- OWASP SAML Security Cheat SheetValidate Signatures: trusted schema/key provenance and security element selection · Validate Protocol Processing Rules · X.509 Certificate Considerations: IdP/SP signing trust association