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.

Credential → ExternalApiContext → Store zinciri authority kaynağıdır. Request içerisindeki store_id tenant seçme yöntemi değildir.

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 query

store_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.

AlanNe anlatır?
client.uidAPI client kimliği
store.idCredential'ın bağlı olduğu mağaza
store.nameMağazanın görünen adı
store.slugMağaza slug bilgisi
scopesCredential'ı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?