Identity Assertion & JWKS
Bir analyze / analyze-sync çağrısı, snapshot'ın yanında imzalı bir identity assertion döndürebilir: identity verdict'ini taşıyan ve Identity tarafından kriptografik olarak imzalanmış kompakt bir JWT (typ: "identity_assertion"). Amacı inkâr-edilemezliktir (non-repudiation) — sizinle hiçbir secret paylaşmayan bir üçüncü taraf, bu verdict'i Identity'nin ürettiğini ve değiştirilmediğini bağımsız olarak doğrulayabilir. Doğrulama, public bir JWKS endpoint'ine karşı yapılır.
Assertion, Identity'nin her zaman döndürdüğü aynı kanıt-derece verdict'ini taşır (identityRiskLevel ve destekleyici alanlar) — yeni bir karar eklemez. Eklediği şey kanıtlanabilirliktir: herkesin kontrol edebileceği bir imza.
Ne zaman kullanılır
İmzalı bir assertion'a, çağıranın dışındaki bir tarafın verdict'e size güvenmeden güvenmesi gerektiğinde başvurun:
- Bir identity kararının gerçekten Identity tarafından üretildiğini doğrulayan bir regülatör ya da denetçi.
- Identity verdict'ini tüketen ve üzerine aksiyon almadan önce bunu bağımsız olarak teyit etmesi gereken bir alt-akış payment-fraud ya da risk servisi.
- "Merchant, Identity'nin X dediğini söylüyor" ifadesinin yeterli olmadığı ve alıcının imzayı bizzat kontrol etmek istediği her servisler-arası sınır.
Doğrulama public bir anahtar kullandığı için, doğrulayıcının paylaşılan bir secret'a ve size dönük canlı bir çağrıya ihtiyacı yoktur — yalnız assertion ve public JWKS yeter.
Doğrulanabilir assertion'lar için asimetrik imzalama gerekir
Varsayılan olarak IDENTITY_ASSERTION_ALG HS256'dır — public doğrulanabilir anahtar üretmeyen simetrik (paylaşılan-secret) bir algoritma. Bu varsayılan durumda public JWKS endpoint'i boş bir anahtar seti ({ "keys": [] }) döndürür ve üçüncü tarafın karşısında doğrulayacağı bir şey yoktur.
Doğrulanabilir bir assertion, asimetrik imzalamanın (ES256 / RS256) yapılandırılmasını gerektirir. Bir asimetrik anahtar yapılandırıldığında, analyze imzalı bir assertion üretebilir ve JWKS endpoint'i eşleşen public anahtarı yayımlar.
Yani dürüst tablo iki durumludur:
| Yapılandırma | analyze'daki assertion | jwks.json | Üçüncü-taraf doğrulaması |
|---|---|---|---|
Varsayılan (HS256, simetrik) | Public doğrulanabilir değil | { "keys": [] } | Paylaşılan secret olmadan mümkün değil |
Asimetrik yapılandırılmış (ES256 / RS256) | İmzalı assertion döner | Public anahtar yayımlanır | Herkes JWKS'e karşı doğrulayabilir |
JWKS endpoint'i
GET /identity/.well-known/jwks.json — public, unauthenticated, 300 sn cache'lenebilir, * CORS. Identity assertion'larını imzalayan public anahtarları standart JWK Set biçiminde yayımlar:
{
"keys": [
{
"kty": "EC",
"crv": "P-256",
"kid": "id-assert-2026-07",
"use": "sig",
"alg": "ES256",
"x": "…",
"y": "…"
}
]
}Boş bir { "keys": [] }, asimetrik imzalama yapılandırılmadığında geçerli ve beklenen bir yanıttır — doğrulanabilir assertion'ların şu an etkin olmadığının işaretidir, bir hata değil.
Bir assertion'ı doğrulama
Assertion standart bir JWT'dir: header'ındaki kid'i JWKS'teki bir anahtarla eşleştirin, ardından imzayı o public anahtarla doğrulayın. Uyumlu herhangi bir JWT kütüphanesi işe yarar — örnek jose kullanıyor.
import { createRemoteJWKSet, jwtVerify } from 'jose';
// Public anahtarları çeker + cache'ler; anahtarı assertion'ın `kid`'ine göre seçer
const JWKS = createRemoteJWKSet(
new URL('https://api-gateway.lunixi.com/api/v1/identity/.well-known/jwks.json'),
);
async function verifyAssertion(assertion) {
const { payload, protectedHeader } = await jwtVerify(assertion, JWKS, {
// kabul ettiğiniz algoritmalar — asimetrik olmalı
algorithms: ['ES256', 'RS256'],
});
// typ, bunu bir identity assertion'a sabitler
if (protectedHeader.typ !== 'identity_assertion') {
throw new Error('identity assertion değil');
}
// payload artık doğrulanmış identity verdict'ini taşır
// ör. payload.identityRiskLevel, payload.subjectId, payload.traceId
return payload;
}Assertion'ı alın
analyze / analyze-sync çağırın (bkz. Sunucu API & Sorgular). Asimetrik imzalama yapılandırıldığında yanıt imzalı assertion'ı içerir; onu doğrulaması gereken tarafa verin.
Public anahtarları çekin
Doğrulayıcı GET /identity/.well-known/jwks.json'u çeker (en fazla 300 sn cache'ler) ve kid'i assertion header'ıyla eşleşen anahtarı seçer.
Doğrulayın
JWT imzasını o public anahtara karşı doğrulayın, kabul edilen algorithms'i asimetrik sete kısıtlayın ve typ: "identity_assertion"'ı kontrol edin. Başarılıysa, payload'ın verdict'inin Identity'den, değiştirilmeden geldiği kanıtlanmış olur.
Notlar
- Public, secret yok. JWKS unauthenticated ve cache'lenebilirdir (300 sn); doğrulama asla paylaşılan bir secret ya da size dönük bir çağrı gerektirmez.
- Etkinleştirmek için yapılandırın. Varsayılan
HS256altında assertion'lar üçüncü-taraf doğrulanabilir değildir ve JWKS boştur — bir anahtar yayımlamak ve doğrulanabilir assertion üretmek için asimetrik imzalamayı (ES256/RS256) yapılandırın. - Tipi sabitleyin. Doğrularken her zaman
typ: "identity_assertion"'ı kontrol edin ve kabul edilen algoritmaları asimetrik sete kısıtlayın.
Sonraki adımlar
- Sunucu API & Sorgular — assertion'ın üretildiği yer
- Risk Snapshot — assertion'da taşınan verdict alanları
- Genel Bakış — kanıt-sağlayıcı sınırı