Güvenli API İstek İmzalama ve Idempotency Mekanizması
Genel Bakış
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 toplu olarak, istemci isteklerinin bütünlüğünü, gerçekliğini ve tekrarlanamazlığını ve ayrıca yinelenen gönderimlerin güvenli bir şekilde ele alınmasını sağlar. 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-Signatureistek başlığında gönderilir.
İlk API çağrınızı yapmadan önce lütfen bizden HMAC Anahtarını isteyin
Kullanılmazsa ne olur?
- İstemci http durumu
400 - Hatalı İstekile bir hata mesajı alacaktır
İmza geçerli değilse ne olur?
- İstemci, http durumu
401 - Yetkisizolan 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-Timestampbaşlığı olarak ekler.
Kullanılmazsa ne olur?
- İstemci, http durumu
400 - Hatalı İstekolan 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-Noncebaşlığı olarak ekler.
Kullanılmazsa ne olur?
- İstemci, http durumu
400 - Hatalı İstekolan bir hata mesajı alacaktır
Yeniden kullanılırsa ne olur?
- İstemci http durumu
409 - Çakışmaile 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-Keybaşlığı olarak gönderir.
What if not used?
- İstemci, http durumu
400 - Hatalı İstekolan bir hata mesajı alacaktır
Yeniden kullanılırsa ne olur?
- İstemci http durumu
409 - Çakışmaile bir hata mesajı alacaktır
Güvenlikle İlgili Hususlar
- HMAC için kullanılan
anahtaristemci 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-Timestampiçin izin verilen maksimum bir zaman eğriliği uygular ve belirli bir pencere içinde kullanılmış/tekrarlanmışX-NonceveyaX-Idempotency-Keydeğerlerini reddeder.
Örnek Başlıklar
Özet Tablo
| Başlık | Değer/Format | Amaç |
|---|---|---|
| X-Signature | Hexadecimal string | Orijinallik/bütünlük talebi |
| X-Timestamp | Milliseconds since epoch | Yeniden oynatmayı önler |
| X-Nonce | UUID v4 | Teklik/tekrarı önleme |
| X-Idempotency-Key | UUID v4 | Yeniden denemeler için Idempotency |