Appearance
Bağlam
- nginx
issuer.bloğu/{slug}/admin/yolunuallow 127.0.0.1; deny allile kapatır; uygulamax-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 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 iptal edebilmesi demektir.
Karar
- K1 — Ayrı yüzey:
/{slug}/api/v1/*(offers, tickets, revocations)./{slug}/admin/*iç kullanımda (127.0.0.1) kalır. - 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 birslug'a ve kapsama bağlıdır (offers:write,tickets:write,revocations:write); başka kiracının yolunda geçersizdir. - 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.
- 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).
- K5 — Pilot seçeneği: üniversite gibi kurumsal entegrasyonlarda mTLS (kurumun X.509'u, güven listesindeki kaydıyla eşleşen) K2'ye ek olarak zorunlu kılınabilir.
- K6 — İstemci:
createIssuerClient({ baseUrl, slug, apiKey });adminTokenyalnı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 |
|---|---|
| HA1 | Dış erişim yalnızca kiracıya bağlı, kapsamlı API anahtarıyla; ortak yönetici anahtarı dışarı açılmaz. |
| HA2 | API anahtarı sunucuda yalnızca özetiyle saklanır; loglarda ve denetim kaydında anahtarın kendisi yer almaz. |
| HA3 | Bir 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: tamga-platform/apps/issuer API rotaları + anahtar deposu, nginx api/v1 bloğu, issuer/client apiKey seçeneği, kurum kılavuzu (docs sitesi).