Mağaza / Tenant
External API'de işlem yapılacak mağaza istemci tarafından seçilmez; doğrulanmış API credential hangi mağazaya bağlıysa istek o tenant kapsamında çalışır.
Tenant nedir?
BYNovax içerisinde her mağaza birbirinden izole bir tenant olarak değerlendirilir. Bir mağazanın ürünleri, siparişleri, fiyatları veya diğer verileri başka mağazanın API credential'ı üzerinden erişilebilir olmamalıdır.
Bu nedenle tenant seçimi güvenilmeyen request parametrelerinden değil credential'ın backend tarafındaki mağaza ilişkisinden türetilir.
Authority zinciri
Authentication sırasında credential doğrulanır. Credential'ın bağlı olduğu client ve mağaza bulunur. Ardından endpoint sorguları bu mağaza kimliğiyle sınırlandırılır.
API Credential → ExternalApiContext → Store → Tenant-scoped querystore_id neden göndermiyorum?
Request body veya query içerisine store_id ekleyerek farklı mağazaya geçiş yapılamaz. Write endpointlerinde caller-controlled store_id açıkça reddedilebilir.
Başka tenant'a ait geçerli bir resource ID biliyor olsanız dahi API sorgusu credential mağaza kapsamıyla sınırlandırıldığı için o kaynağa erişemezsiniz.
Credential hangi mağazaya bağlı?
En kolay doğrulama yöntemi GET /health çağrısıdır. Health response size credential client bilgisini, mağaza bilgisini ve aktif scope listesini gösterir.
| Alan | Ne anlatır? |
|---|---|
| client.uid | API client kimliği |
| store.id | Credential'ın bağlı olduğu mağaza |
| store.name | Mağazanın görünen adı |
| store.slug | Mağaza slug bilgisi |
| scopes | Credential'ın kullanabileceği API yetkileri |
Entegrasyon örneği
ERP sisteminiz iki farklı BYNovax mağazasıyla çalışıyorsa her mağaza için kendisine ait credential saklamalısınız. ERP içerisindeki mağaza kaydı hangi credential ile eşleşiyorsa API çağrısını o credential üzerinden yapmalısınız.
Aynı credential'ı kullanıp request'e farklı store_id koymak doğru mimari değildir.
Kontrol listesi
- GET /health 200 dönüyor mu?
- store.name beklediğiniz mağaza mı?
- Gerekli scope health response içerisinde var mı?
- Credential yalnızca server-side saklanıyor mu?