RESTful web hizmetleri nasıl güvenli hale getirilir?


88

Güvenli RESTful web hizmetleri uygulamalıyım . Google'ı kullanarak zaten biraz araştırma yaptım ama takılıp kaldım.

Seçenekler:

TLS (HTTPS) +

Dikkate alınacak daha fazla olası seçenek var mı? OAuth ise hangi sürüm? Fark eder mi? Şimdiye kadar okuduğum kadarıyla OAuth 2.0 taşıyıcı belirteçlerle (yani imzasız) güvensiz görünüyor .

REST tabanlı kimlik doğrulama hakkında çok ilginç başka bir makale buldum .

REST API'nizi Güvenceye Alın ... Doğru Yol

Yanıtlar:


59

Başka, çok güvenli bir yöntem var. Müşteri sertifikaları. Sunucuların https üzerinden iletişim kurduğunuzda nasıl bir SSL Sertifikası sunduğunu biliyor musunuz? Peki sunucular bir istemciden bir sertifika talep edebilir, böylece müşterinin söylediği kişi olduğunu bilirler. İstemciler sertifikalar oluşturur ve bunları size güvenli bir kanal üzerinden verir (ofisinize bir USB anahtarıyla - tercihen truva atı olmayan bir USB anahtarıyla gelmek gibi).

Sen yüklemek kamu sertifika anahtarını web sunucusuna istemci sertifikaları (ve onların imzalayanın sertifikası (ler), gerekirse) ve web sunucusu kimseden bağlantılarını kabul etmeyecektir hariç certs için karşılık gelen özel anahtarlara sahip kişiler hakkında biliyor. HTTPS katmanında çalışır, böylece OAuth gibi uygulama düzeyinde kimlik doğrulamasını tamamen atlayabilirsiniz (gereksinimlerinize bağlı olarak). Bir katmanı soyutlayabilir ve yerel bir Sertifika Yetkilisi oluşturabilir ve istemcilerden gelen Sertifika Taleplerini imzalayarak 'onları ofise getir' ve 'sertifikaları sunucuya yükle' adımlarını atlamanıza olanak tanır.

Boyun ağrıyor mu? Kesinlikle. Her şey için iyi mi? Hayır! Çok güvenli mi? Evet.

Bununla birlikte, müşterilerin sertifikalarını güvende tutmalarına dayanır (özel anahtarlarını çevrimiçi olarak gönderemezler) ve genellikle herhangi birinin kaydolmasına ve bağlanmasına izin vermek yerine müşterilere bir hizmet sattığınızda kullanılır.

Her neyse, aradığınız çözüm olmayabilir (muhtemelen dürüst olmayacak), ama bu başka bir seçenek.


Tamam, şimdi hangisinin daha iyi olduğu kafam karıştı, bu yaklaşım veya başka bir cevap . Detaylandırır mısın : D
fikr4n

Cevabınız ustalar için mükemmel, acemi için kafa karıştırıcı olacaktır. Okumak için bazı ayrıntılı bilgiler veya bağlantılar verebilir misiniz?
Rajan Rawal

Sertifikalar kendinden imzalıysa, yine de "çok güvenli" mi?
Joyce

@ Joyce düşünmezdim. Güvenilir olmadığınız için (suç yok), imzaladığınız sertifikalara (kendi sertifikanızla) güvenilemez. Kendinden imzalı sertifikaların test için daha yararlı olduğuna inanıyorum.
mbmast

Son kullanıcının (müşteri), genel anahtarı sunucuyla paylaşılan bir istemci sertifikasına sahip olduğu düşünüldüğünde, müşterinin makinesi saldırıya uğrarsa ve istemci sertifikası çalınırsa "çok güvenli" olan şey tamamen ortadan kalkmaz mı?
mbmast

18

HTTP Temel + HTTPS yaygın bir yöntemdir.


3
Her ikisi de https üzerinden ise, http özetinin size http basic üzerinden bir şey vereceğini sanmıyorum.
pc1oad1etter

3
HTTP özetinin faydaları hakkında yararlı bilgileri, tonu olmadan ciddiye alabilirsiniz.
pc1oad1etter

9

OAuth sürümleri arasında seçim yapıyorsanız, OAuth 2.0 ile gidin.

OAuth taşıyıcı jetonları yalnızca güvenli bir aktarımla kullanılmalıdır.

OAuth taşıyıcı jetonları yalnızca konuşmayı şifreleyen aktarım kadar güvenli veya güvensizdir. HTTPS, yeniden oynatma saldırılarına karşı koruma sağlar, bu nedenle hamiline ait jetonun yeniden oynatmaya karşı koruma sağlaması gerekmez.

Birisi taşıyıcı jetonunuzu ele geçirirse, API'yi çağırırken sizi taklit edebilir, ancak bu riski azaltmanın birçok yolu vardır. Jetonlarınıza uzun bir son kullanma süresi verirseniz ve müşterilerinizin jetonları yerel olarak depolamasını beklerseniz, jetonlarınızın kısa bir süre sona ermesine ve müşterilerin her oturum için yeni jetonlar edinmesini istemenize kıyasla jetonların ele geçirilmesi ve kötüye kullanılması riskiniz daha yüksektir. ve müşterilere jetonları saklamamalarını tavsiye edin.

Birden çok katılımcıdan geçen yüklerin güvenliğini sağlamanız gerekiyorsa, HTTPS / SSL grafiğin yalnızca bir bağlantısını şifrelediği için HTTPS / SSL'den daha fazlasına ihtiyacınız vardır. Bu bir OAuth hatası değildir.

Taşıyıcı belirteçleri, müşterilerin elde etmesi kolaydır, müşterilerin API çağrıları için kullanması kolaydır ve Google, Facebook ve diğer birçok hizmetten halka açık API'leri korumak için yaygın olarak kullanılır (HTTPS ile).

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.