REST API güvenliği: HMAC / key hashing vs JWT


16

Sadece bu makaleyi okuyun birkaç yaşındadır ama DİNLENME API'leri güvence zeki bir şekilde tarif etmektedir. esasen:

  • Her müşterinin benzersiz bir genel / özel anahtar çifti vardır
  • Özel anahtarı yalnızca istemci ve sunucu bilir; asla tel üzerinden gönderilmez
  • Her istekte, istemci birkaç girdi alır (tüm isteğin kendisi, geçerli zaman damgası ve özel anahtar) ve bunları bir karma değeri oluşturmak için bir HMAC işlevi aracılığıyla çalıştırır
  • Istemci daha sonra normal istek (ortak anahtar içeren) ve karma sunucuya gönderir
  • Sunucu, istemcinin özel anahtarını arar (sağlanan ortak anahtara göre) ve isteğin bir tekrar saldırısının kurbanı olmadığını doğrulayan bazı zaman damgası denetimi (itirafla anlamıyorum) yapar
  • Her şey yolundaysa, sunucu isteğin kendi karmasını oluşturmak için özel anahtarı ve aynı HMAC işlevini kullanır
  • Sunucu daha sonra her iki karmayı (istemci tarafından gönderilen yanı sıra oluşturduğu) karşılaştırır; eşleşmeleri durumunda isteğin kimliği doğrulanır ve devam etmesine izin verilir

Sonra tökezledi JWT çok benzer sesler, hangi. Ancak ilk makale JWT'den hiç bahsetmiyor ve bu yüzden JWT'nin yukarıdaki yetkilendirme çözümünden farklı olup olmadığını ve eğer öyleyse nasıl olduğunu merak ediyorum.


1
Lol ... Ben sadece aynı soruyu sormak istedim ve sizinkine rastladım. Vatansız kimlik doğrulamasıyla ilgili bulduğum ilk şeylerden biri AWS'den geliyordu : docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/… ve bu massimilianosciacco.com/… gibi bir şey uyguladı . Sonra JWS / JWT buldum ve bir şekilde benzer. Ama anladığım kadarıyla JWT bir standart ve yukarıda açıklanan diğer çözümler bazı özel uygulamalar (standart değil). Yanılıyorsam biri beni düzeltir.
nyxz

2
Bu tür detaylar için endişelenen tek kişi ben olmadığımı bilmek güzel! JWT kesinlikle benzer hissediyor ve bonus standartlaştırılmış olması. Ben sadece bu özel HMAC çözümü ile nasıl (güvenlik açısından) fuar merak ediyorum.
smeeb

Yanıtlar:


7

Bu çok basit bir cevapla başlayalım.

JWT (OAuth ve OpenID bağlamında kullanıldığı gibi), istemci ve API arasında paylaşılan sırlar gerektirmez. Her biri bir sırrı paylaşan 3 bileşen ve çift çifti vardır: istemci <-> kimlik sunucusu, kimlik sunucusu <-> API.

Bu, en karmaşıklığı API'den kimlik sunucusuna taşır, API sadece belirtecin kimlik sunucusu tarafından yayınlandığını ve temperlenmediğini kontrol etmelidir. API'nın, JWT imzasının kimlik sunucusu ve API arasındaki bilinen tek paylaşılan gizli kodla geçerli olup olmadığını kontrol ettiğini doğrulamak için. Bu kadar!

Kimlik sunucusunun kullanıcı kimliğini nasıl doğruladığı büyük ölçüde değişebilir (çoğu durumda bir TLS bağlantısı üzerinden eski kullanıcı adı + parola çiftidir), ancak API'niz üzerinde bir etkisi yoktur.

JWT kullanırken mesajın gizliliği ve güvenliği ve jeton TLS tarafından ele alınır, JWT bu tür konulardan habersizdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.