Skip to content

BaseForge v0.6.3-beta ​

Bu bir güvenlik sürümü. Gerçek bir multi-tenant proje (ProKantar) 0.6.2 ile üretilirken üretilen kodda birkaç açık ortaya çıktı: kimlik doğrulamasız gRPC, iş akışına ait alanları ezebilen CRUD uçları, serbest sortBy, kaçışlanmayan arama ve varsayılan veritabanı şifreleri. Bu sürüm hepsini kapatıyor. Değişikliklerin çoğu varsayılan olarak açık; production'daki bir servisi yükseltmeden önce Kırıcı değişiklikler bölümünü okuyun.

Güvenlik ​

Kimlik doğrulamalı gRPC ​

  • auth bloğu olan servislerde her gRPC ucu artık geçerli bir JWT istiyor (MapGrpcService<…>().RequireAuthorization()).
  • Üretilen gRPC client'lar kimliği kendiliğinden ekliyor (AddBaseForgeCallCredentials):
    • HTTP isteği içinde çağıranın Bearer token'ı iletiliyor; çağrılan servis gerçek kullanıcıyı (roller, tenant_id) görüyor;
    • arka plan kodunda (RabbitMQ tüketicileri, job'lar) Identity'den client_credentials servis token'ı alınıp önbellekte tutuluyor (IServiceTokenProvider).
  • Kiracı x-tenant-id metadata'sıyla taşınıyor ve yalnızca servis token'ıyla geldiğinde kabul ediliyor: Identity artık client-credentials token'larına bf_svc claim'i basıyor. Kullanıcı başlık göndererek kiracı değiştiremez.
  • Yeni TenantScope (BaseForge.Core.MultiTenancy): HTTP isteği dışında çalışan kod için ortam kiracısı.

Sunucunun yönettiği alanlar — serverManaged ​

yaml
status: { type: enum, values: [Open, Completed], serverManaged: true }
netKg:  { type: decimal, nullable: true, serverManaged: true }

Alan, üretilen Create/Update komutlarına girmiyor, DTO'da kalıyor. Onu yalnızca kendi komutlarınız (Custom/ altında) değiştiriyor; durum geçişleri ve hesaplanan toplamlar artık düz bir PUT ile yazılamıyor. Designer'da bunun için bir onay kutusu var.

Güvenli sıralama ve arama ​

  • sortBy yalnızca bir izin listesinden Alan, Alan asc ya da Alan desc kabul ediyor (virgülle ayrılmış, en çok 5). Varsayılan liste tüm skaler alanlar artı CreatedAt/UpdatedAt; daraltmak için sortFields: [...] verin. Dışındaki her şey 400 döner. GenericRepository de TenantId, IsDeleted ve DeletedAt alanlarını kendi başına reddediyor.
  • searchFields: [...] ile search'ün aradığı metin alanları sınırlanabiliyor (varsayılan: hepsi). Kimlik numarası gibi hassas alanları bu listeye koymayın.
  • Arama metnindeki %, _ ve \ kaçışlanıyor. 2 karakterden kısa terimler yok sayılıyor.

Sayaç uçları ​

  • Yeni erişim action'ı: access: { counters: authenticated | [roller] }. Verilmezse sayaçlar eskisi gibi herkese açık kalıyor.
  • increment-* uçları kullanıcı (ya da IP) başına dakikada 30 istekle sınırlı; 31. istek 429 alıyor.

Gizli bilgiler ve portlar ​

  • Üretilen her servise (ve Identity'ye) rastgele 32 karakterlik POSTGRES_PASSWORD içeren bir .env ile commit'lenen bir .env.example yazılıyor. .env gitignore'lu ve Docker imajına girmiyor.
  • appsettings.json artık şifre içermiyor. docker-compose.yml ${POSTGRES_PASSWORD} okuyor ve değer yoksa başlamıyor. Yerel dotnet run .env'i kendiliğinden yüklüyor.
  • Postgres yalnızca 127.0.0.1'de yayınlanıyor.
  • Development dışında, veritabanı şifresi boş ya da change_me olan servis açılmıyor.

Kırıcı değişiklikler ​

  • change_me ile çalışan production: bağlantı cümlesi hâlâ change_me (ya da boş şifre) kullanan Development dışı bir servis açılmaz. Önce .env'e ya da ortama gerçek bir şifre verin.
  • Mevcut volume'lar korunur: 0.6.2 veya öncesiyle üretilmiş bir servis yeniden üretildiğinde change_me algılanıp .env'de tutulur; yerel veritabanları çalışmaya devam eder. Şifreyi bilinçli olarak değiştirin.
  • sortBy: Alan [asc|desc] dışındaki ifadeler ya da izin listesinde olmayan alanlar artık çalıştırılmıyor, 400 dönüyor.
  • Arka plan gRPC çağrıları: bir tüketiciden ya da job'dan başka bir servisi çağırmak için identity/auth.yaml'a gizli bir client ekleyin (clientId: {servis}-service, grants: [client_credentials], scopes: [api]) ve secret'ını çağıran servisin .env'ine Auth__ServiceClient__ClientSecret olarak yazın. Eklenmezse kullanıcı kaynaklı çağrılar çalışmaya devam eder, arka plan çağrıları 401 alır.

Yükseltme ​

bash
dotnet tool update -g BaseForge.CodeGen --prerelease
baseforge update <servis>   # spec yüklü Designer açılır → Generate

Yeniden üretilen servisler BaseForge.* 0.6.3-beta paketlerini kullanır. Custom/ altındaki elle yazılmış koda dokunulmaz. Ayrıntılar mimari kararlarda (§5.1.1, §5.5, §6.2, §6.4, §6.5).

Sırada ​

Integration event'lerde ve tüketicide kiracı bilgisi, entity bazında tenantScoped, kiracıya duyarlı unique index'ler, Identity'de kiracı yönetimi, defaultSort ile aralık/IN filtreleri, PostGIS geometry tipi ve Designer korumaları (bayat form kontrolü, port çakışması).

MIT Lisansı ile yayınlanmıştır.