APISHIELDDEMO
Aynı endpoint, iki istemci: tarayıcı UA → Turnstile + Bot sinyalleri  |  X-App-Version → Firebase App Check JWT (API Shield)

Web istemcisi User-Agent: Mozilla/… (tarayıcı)

Web kimliği tarayıcının kendi User-Agent'ından anlaşılır; istemci tarafında hiçbir ayar yok. WAF kuralı web trafiğini Managed Challenge'a sokar. Turnstile pre-clearance modunda olduğundan çözülünce tarayıcıya cf_clearance cookie'si verilir ve sonraki /api çağrıları challenge'sız geçer. Önemli: cookie tarayıcının gerçek User-Agent'ına bağlıdır; bu yüzden fetch UA'yı değiştirmez.

Turnstile: arka planda doğrulanıyor… sid: kontrol ediliyor…
—
Henüz istek yok.

Mobil istemcisi X-App-Version header'ı var

Mobil kimliği X-App-Version header'ından anlaşılır; User-Agent'a dokunulmaz. Uygulama önce App Check token alır (demo issuer: POST /appcheck/token), sonra X-Firebase-AppCheck ile API'yi çağırır. Ayrıca uygulama anonim Firebase Auth ile bir uid alır ve Authorization: Bearer <ID token> gönderir; uid Google imzalı olduğu için istemci değiştiremez, sayaçlar ve session identifier buna bağlıdır. API Shield her iki JWT'yi doğrular; WAF kuralları claim'leri ve minimum sürümü (3.0+) denetler.

token yok
—
Henüz istek yok.

Bilinmeyen istemci ne X-App-Version ne tarayıcı UA

Ne X-App-Version taşıyan ne de tarayıcı UA'sı olan istemciler (curl, Postman, boş UA) /api/* için bloklanır. Bu buton User-Agent: curl/8.0 ile dener; tarayıcı UA override'a izin vermezse istek gerçek UA ile gider ve web kuralına düşer.

—
Henüz istek yok.