Skip to main content

Güvenli API İstek İmzalama ve Idempotency Mekanizması

Genel Bakış

🧩 Bu API, HMAC tabanlı istek imzalama, zaman damgası, benzersiz istek tanımlama (nonce) ve idempotency anahtarları içeren sağlam bir güvenlik mekanizmasından yararlanır. Bu mekanizmalar; isteğin bütünlüğünü, kimlik doğrulamasını ve yeniden oynatılamamasını güvence altına alır, aynı zamanda yinelenen gönderimleri güvenle yönetir. 🛡️ 📘 Bu belgede her bir mekanizma, amaçları ve gerekli istemci mantığının nasıl uygulanacağı (örneğin Postman veya özel API istemcilerinde) açıklanmaktadır.

1. HMAC İmzası (X-Signature Başlığı)

Nedir?

🔑 Bir HMAC (Karma Tabanlı Mesaj Kimlik Doğrulama Kodu), paylaşılan bir sır ve istek verileri kullanılarak oluşturulan bir kriptografik imzadır. Talebin değiştirilememesini ve gönderenin kimliğinin doğrulanabilmesini sağlar.

Amacı

  • Bütünlük 🛡️: İsteğin herhangi bir kısmının (yöntem, URI, gövde, zaman damgası) değiştirilip değiştirilmediğini tespit eder.
  • Kimlik Doğrulama 🔐: İsteğin gizli anahtarı bilen güvenilir bir istemciden geldiğini doğrular.
  • Yeniden Oynatma Önleme ♻️: Bir zaman damgasına ve benzersiz değerlere bağlı olarak yeniden oynatma saldırılarını tespit edilebilir hale getirir.

Nasıl Kullanılır?

  • İstemci imzalamak için HTTP yöntemini, tam istek yolunu (sorgu dahil), milisaniye cinsinden geçerli zaman damgasını ve çözümlenmiş istek gövdesini birleştiren bir dize oluşturur 🧾:
  • İstemci, paylaşılan anahtarı (güvenli bir kasada tutulur, asla ifşa edilmez) kullanarak HMAC SHA256 imzasını oluşturur 🔒:
  • Bu imza X-Signature istek başlığında gönderilir 🚀.
⚠️ İlk API çağrınızı yapmadan önce lütfen bizden HMAC Anahtarını talep edin.

Kullanılmazsa ne olur?

  • İstemci http durumu 400 - Hatalı İstek ile bir hata mesajı alacaktır

İmza geçerli değilse ne olur?

  • İstemci, http durumu 401 - Yetkisiz olan bir hata mesajı alacaktır.

2. Zaman Damgası (X-Timestamp Başlığı)

Nedir?

⏱️ İsteğin oluşturulduğu andaki Unix zaman damgası (milisaniye cinsinden).

Amaç

  • Tekrar Oynatma Önleme 🛑: Sunucu geçerli istekler için katı zaman pencereleri uygulayabildiğinden, bir saldırganın daha önce geçerli olan bir isteği tekrar kullanmasını önler.

Nasıl Kullanılır?

  • İstemci, isteği göndermeden hemen önce zaman damgasını oluşturur ve bunu X-Timestamp başlığı olarak ekler ⌚.

Kullanılmazsa ne olur?

  • İstemci, http durumu 400 - Hatalı İstek olan bir hata mesajı alacaktır

3. Nonce - Tek Seferlik (X-Nonce Başlığı)

Nedir?

🎲 Bir nonce, her istekte bulunan rastgele oluşturulmuş benzersiz bir tanımlayıcıdır (UUID v4).

Amaç

  • Yeniden Oynatma Önleme 🔁: Her isteği benzersiz bir şekilde tanımlayarak isteğin yeniden oynatılmasını daha da önler. Yöntem, URI ve gövde aynı olsa bile, nonce farklı olacaktır.

Nasıl Kullanılır?

  • İstemci her istek için yeni bir UUID v4 oluşturur ve bunu X-Nonce başlığı olarak ekler 🎯.

Kullanılmazsa ne olur?

  • İstemci, http durumu 400 - Hatalı İstek olan bir hata mesajı alacaktır

Yeniden kullanılırsa ne olur?

  • İstemci http durumu 409 - Çakışma ile bir hata mesajı alacaktır

4. Idempotency Anahtarı (X-Idempotency-Key Başlığı)

Nedir?

🪪 Her istek için bir tekil tanımlayıcı (UUID v4), sunucunun yinelenen gönderimleri tanımasını ve güvenli bir şekilde göz ardı etmesini sağlar (örneğin, bir POST isteğinin yeniden denenmesi).

Amaç

  • Idempotency 🔂: Ağ hataları nedeniyle bir isteğin yeniden denenmesinin yinelenen kaynak oluşturma veya yan etkilere neden olmayacağını garanti eder.

Nasıl Kullanılır?

  • İstemci her işlem için yeni bir UUID v4 oluşturur ve bunu X-Idempotency-Key başlığı olarak gönderir 📮.

Kullanılmazsa ne olur?

  • İstemci, http durumu 400 - Hatalı İstek olan bir hata mesajı alacaktır

Yeniden kullanılırsa ne olur?

  • İstemci http durumu 409 - Çakışma ile bir hata mesajı alacaktır

Güvenlikle İlgili Hususlar

  • HMAC için kullanılan anahtar istemci kodunda veya belgelerinde asla paylaşılmamalı veya ifşa edilmemelidir 🔐.
  • Ortadaki adam saldırılarını önlemek için her zaman HTTPS kullanın 🌐.
  • Sunucular, X-Timestamp için izin verilen maksimum bir zaman eğriliği uygular ve belirli bir pencere içinde kullanılmış/tekrarlanmış X-Nonce veya X-Idempotency-Key değerlerini reddeder ⛔.

Örnek Başlıklar

Özet Tablo 📊