Skip to content
ADR-0016Mimari karar kaydıKabul edildisürüm 1.0.02 Ekim 2026

Bağlam ​

  • nginx issuer. bloğu /{slug}/admin/ yolunu allow 127.0.0.1; deny all ile kapatır; uygulama x-admin-token (tek, tüm kiracılar için ortak) bekler. Bu, demo portalı (aynı sunucu) için doğrudur.
  • D10/D14 ile dış kurumlar (belge veren (issuer)Belgeyi imzalayıp veren kurum: üniversite, meslek kuruluşu, kamu kurumu ya da şirket.) için istemci yazıldı (@tamga-network/issuer/client: createOffer, sellTicket, revoke…); üretimde bu uçlara dışarıdan ulaşmanın güvenli yolu yok. Ortak yönetici anahtarını kurumlara vermek bir kiracının diğerinin belgelerini (credential)Belge verenin imzaladığı ve kişinin cüzdanında duran dijital belge; kişi yalnız istenen alanları gösterir.iptal (revocation)Bir belgenin süresi dolmadan geçersiz kılınması; belge veren bunu doğrulayıcıların denetlediği iptal listesinde işaretler. edebilmesi demektir.

Karar ​

  1. K1 — Ayrı yüzey: /{slug}/api/v1/* (offers, tickets, revocations). /{slug}/admin/* iç kullanımda (127.0.0.1) kalır.
  2. K2 — Kiracı API anahtarı: kurum başına bir ya da daha fazla anahtar; Authorization: Bearer tmg_<slug>_<rastgele>. Sunucuda yalnızca özeti (SHA-256) saklanır; anahtar yalnızca oluşturulurken bir kez gösterilir. Anahtar bir slug'a ve kapsama bağlıdır (offers:write, tickets:write, revocations:write); başka kiracının yolunda geçersizdir.
  3. K3 — Döndürme ve iptal: anahtarın son geçerlilik tarihi (öneri 90 gün), iki anahtar aynı anda geçerli olabilir (kesintisiz döndürme); iptal anında etkili.
  4. K4 — Sınırlar: anahtar başına hız sınırı, istek boyutu sınırı; denetim kaydında anahtar kimliği (özet öneki) ve olay adı — kişisel veri ve anahtarın kendisi yok (PR14/AP3).
  5. K5 — Pilot seçeneği: üniversite gibi kurumsal entegrasyonlarda mTLS (kurumun X.509'u, güven listesindeki (trust list)Bir ülkenin kök sertifikalarını, belge verenlerini ve kayıtlı relying party'lerini taşıyan imzalı liste. Bugün Tamga'da güven bu listelere dayanır; ortak defter sonra gelir. kaydıyla eşleşen) K2'ye ek olarak zorunlu kılınabilir.
  6. K6 — İstemci: createIssuerClient({ baseUrl, slug, apiKey }); adminToken yalnızca iç kullanım için kalır.

Gerekçe / alternatifler ​

  • Ortak yönetici anahtarını dışarı açmak: kiracılar arası yetki yok → reddedilir.
  • OAuth 2.0 client credentials: doğru ama ek yetkilendirme sunucusu ister; ilk kurumlar için ağır. K2 ileride OAuth'a taşınabilir.
  • Yalnızca mTLS: güçlü, ama küçük satıcılar için sertifika yönetimi engel; K5 isteğe bağlı olarak korunur.

Değişmezler ​

#Kural
HA1Dış erişim yalnızca kiracıya bağlı, kapsamlı API anahtarıyla; ortak yönetici anahtarı dışarı açılmaz.
HA2API anahtarı sunucuda yalnızca özetiyle saklanır; loglarda ve denetim kaydında anahtarın kendisi yer almaz.
HA3Bir anahtar yalnızca kendi slug'ının yollarında ve kapsamındaki işlemlerde geçerlidir.

Durum ​

Accepted — 2026-09-27. DECISIONS: D-API-1. Not: pilot üniversitesi entegrasyonunda K5 (mTLS) değerlendirilecek.

Uygulama: apps/issuer (operatör deposu) API rotaları + anahtar deposu, nginx api/v1 bloğu, issuer/client apiKey seçeneği, kurum kılavuzu (docs sitesi).