Next.js 15'te Webhook İmzası Doğrulama: Raw Body Sorunu Çözümü
Next.js 15 ile webhook imzası doğrulamak basit görünse de, modern framework'ler bunu gerçekten zor hale getiriyor. Stripe, Clerk veya Lemon Squeezy gibi servislerden gelen POST isteklerinin imzasını kontrol etmek için, gelen ham body'nin byte-by-byte aynı kalması gerekiyor. Ama framework'ler otomatik olarak JSON'u parse ediyor ve bu işlemde bir boşluk, satır sonu veya karakter bile değişirse imza doğrulaması başarısız oluyor.
Sorun şu: sağlayıcı sunucu tarafında imzayı oluştururken kullandığı tam string, sen alıcı tarafta doğrulama yaparken de aynı olmalı. Framework'ler bu raw body'ye erişimi kasıtlı olarak zorlaştırıyor. Next.js App Router, Cloudflare Workers, Hono, hepsi farklı yollardan çözüm bekliyor.
Çözüm route handler'da Next.js'in `req.text()` veya `req.arrayBuffer()` metodunu kullanmak, JSON parse etmeden önce imzayı doğrulamaktır. Stripe'ın SDK'sı örneğin webhook secret ile birlikte raw body alırsa imzayı kontrol edebiliyor. Clerk ve Lemon Squeezy da benzer şekilde çalışıyor.
Praktik olarak, webhook endpoint'inde ilk adım body'yi string olarak al, header'daki imzayla kütüphanenin doğrulama fonksiyonunu çağır, ancak o zaman JSON parse et. Bu sıra önemli. Aksi takdirde cryptographic verification her zaman başarısız olur ve webhook'lar hiç çalışmaz.
0 yorum