SOAP Örneği ile Web Hizmeti (WS) Güvenlik Eğitimi

İçindekiler:

Anonim

WS Güvenliği nedir?

WS Güvenliği, veriler bir Web hizmetinin parçası olarak değiş tokuş edildiğinde güvenliği ele alan bir standarttır. Bu, SOAP'ta web hizmetleri oluşturmak için onu çok popüler kılan önemli bir özelliktir.

Güvenlik, herhangi bir web uygulamasında önemli bir özelliktir. Neredeyse tüm web uygulamaları internete açık olduğundan, web uygulamaları için her zaman bir güvenlik tehdidi olasılığı vardır. Bu nedenle, web tabanlı uygulamalar geliştirirken, uygulamanın güvenlik göz önünde bulundurularak tasarlanıp geliştirildiğinden emin olunması her zaman önerilir.

Bu eğitimde öğreneceksiniz-

  • Güvenlik Tehditleri ve Alınacak Önlem
  • Web Servis Güvenlik Standartları
  • Güvenli web hizmetleri nasıl oluşturulur
  • Web Hizmeti Güvenliği En İyi Uygulamaları

Güvenlik Tehditleri ve Alınacak Önlem

Bir web uygulamasına düşman olabilecek güvenlik tehditlerini anlamak için bir web uygulamasının basit bir senaryosuna bakalım ve Güvenlik açısından nasıl çalıştığını görelim.

HTTP için mevcut güvenlik önlemlerinden biri HTTPS protokolüdür. HTTPS, web üzerinden istemci ve sunucu arasındaki güvenli iletişim yoludur. HTTPS, güvenli iletişim için Güvenli Yuva katmanını veya SSL'yi kullanır. Hem istemci hem de sunucu, istemci ile sunucu arasında herhangi bir iletişim gerçekleştiğinde kendilerini gerçek olarak tanıtmak için dijital bir sertifikaya sahip olacaktır.

İstemci ve sunucu arasındaki standart bir HTTPS iletişiminde aşağıdaki adımlar gerçekleşir

  1. İstemci, istemci sertifikası aracılığıyla sunucuya bir istek gönderir. Sunucu, istemci sertifikasını gördüğünde, önbellek sisteminde bir not alır, böylece yanıtın yalnızca bu istemciye geri dönmesi gerektiğini bilir.
  2. Sunucu daha sonra sertifikasını göndererek istemciye kendi kimliğini doğrular. Bu, istemcinin doğru sunucuyla iletişim kurmasını sağlar.
  3. Bundan sonra istemci ve sunucu arasındaki tüm iletişim şifrelenir. Bu, başka herhangi bir kullanıcının güvenliği kırmaya ve gerekli verileri almaya çalışırsa, şifreleneceği için okuyamayacaklarını garanti eder.

Ancak yukarıdaki güvenlik türü her durumda işe yaramayacaktır. İstemcinin birden fazla sunucuyla konuşabileceği bir zaman gelebilir. Aşağıda verilen bir örnek, aynı anda hem bir veritabanı hem de bir web sunucusuyla konuşan bir istemciyi göstermektedir. Bu gibi durumlarda, tüm bilgiler https protokolünden geçemez.

Bu, WS Security spesifikasyonunu yerine getirerek bu tür engelleri aşmak için SOAP'ın devreye girdiği yerdir. Bu belirtimle, güvenlikle ilgili tüm veriler SOAP başlık öğesinde tanımlanır.

Başlık öğesi, aşağıda belirtilen bilgileri içerebilir

  1. SOAP gövdesi içindeki mesaj herhangi bir güvenlik anahtarıyla imzalanmışsa, bu anahtar başlık öğesinde tanımlanabilir.
  2. SOAP Gövdesi içindeki herhangi bir öğe şifrelenirse, başlık, hedefe ulaştığında mesajın şifresinin çözülebilmesi için gerekli şifreleme anahtarlarını içerecektir.

Çoklu sunucu ortamlarında, yukarıdaki SOAP kimlik doğrulama tekniği aşağıdaki şekilde yardımcı olur.

  • SOAP gövdesi şifrelendiğinden, şifresi yalnızca web hizmetini barındıran web sunucusu tarafından çözülebilir. Bunun nedeni SOAP protokolünün nasıl tasarlandığıdır.
  • Diyelim ki mesaj bir HTTP isteğinde veritabanı sunucusuna iletilirse, şifresi çözülemez çünkü veritabanı bunu yapmak için doğru mekanizmalara sahip değildir.
  • Yalnızca istek Web sunucusuna bir SOAP protokolü olarak ulaştığında, mesajı deşifre edebilir ve uygun yanıtı istemciye geri gönderebilir.

Sonraki konularda WS Güvenlik standardının SOAP için nasıl kullanılabileceğini göreceğiz.

Web Servis Güvenlik Standartları

Önceki bölümde tartışıldığı gibi, WS-Security standardı, güvenlik tanımının SOAP Başlığında yer alması etrafında döner.

SOAP başlığındaki kimlik bilgileri 2 şekilde yönetilir.

İlk olarak, UsernameToken adlı özel bir öğeyi tanımlar. Bu, kullanıcı adı ve parolayı web hizmetine iletmek için kullanılır.

Diğer yol, BinarySecurityToken aracılığıyla bir İkili Token kullanmaktır. Bu, Kerberos veya X.509 gibi şifreleme tekniklerinin kullanıldığı durumlarda kullanılır.

Aşağıdaki diyagram, güvenlik modelinin WS Security'de nasıl çalıştığının akışını gösterir.

Yukarıdaki iş akışında yer alan adımlar aşağıdadır

  1. Web hizmeti istemcisinden Security Token Service'e bir istek gönderilebilir. Bu hizmet, gerçek SOAP web hizmetine kullanıcı adları / parolalar veya sertifikalar sağlamak için özel olarak oluşturulmuş bir ara web hizmeti olabilir.
  2. Güvenlik belirteci daha sonra Web hizmeti istemcisine iletilir.
  3. Web hizmeti istemcisi daha sonra web hizmetini aradı, ancak bu sefer güvenlik belirtecinin SOAP mesajına gömülü olduğundan emin oldu.
  4. Web hizmeti daha sonra kimlik doğrulama belirteci ile SOAP mesajını anlar ve ardından güvenlik belirtecinin gerçek olup olmadığını görmek için Güvenlik Belirteci hizmetiyle iletişime geçebilir.

Aşağıdaki kod parçası, WSDL belgesinin parçası olan kimlik doğrulama bölümünün biçimini göstermektedir. Şimdi aşağıdaki parçacığa göre, SOAP mesajı, biri Kullanıcı Adı ve diğeri Parola olmak üzere 2 ek öğe içerecektir.

SOAP Mesajı gerçekte istemciler ve sunucu arasında iletildiğinde, mesajın kullanıcı kimlik bilgilerini içeren kısmı yukarıda gösterilene benzeyebilir. Wsse eleman adı, SOAP için tanımlanan özel bir elemandır ve güvenlik temelli bilgiler içerdiği anlamına gelir.

Güvenli web hizmetleri nasıl oluşturulur

Şimdi SOAP web servis güvenlik örneğine bakalım. SOAP bölümünde daha önce gösterilen örnek üzerine bir web servis güvenliği oluşturacağız ve ona bir güvenlik katmanı ekleyeceğiz.

Örneğimizde, web servisini çağıran uygulamaya bir dize döndürmek için kullanılacak basit bir web servisi oluşturacağız. Ancak bu sefer, web hizmeti çağrıldığında, kimlik bilgilerinin arayan hizmete sağlanması gerekir. SABUN web servisimizi oluşturmak ve ona güvenlik tanımını eklemek için aşağıdaki adımları takip edelim.

Adım 1) İlk adım, boş bir Asp.Net Web uygulaması oluşturmaktır. Visual Studio 2013'ten Dosya-> Yeni proje menü seçeneğine tıklayın.

Yeni Proje seçeneğine tıkladığınızda, Visual Studio size proje türünü seçmeniz ve projenin gerekli ayrıntılarını vermeniz için başka bir iletişim kutusu verecektir. Bu sonraki adımda açıklanmaktadır

Adım 2) Bu adımda,

  1. İlk olarak ASP.NET Web uygulaması için C # web şablonunu seçtiğinizden emin olun. Web hizmetleri projesi oluşturabilmek için projenin bu tipte olması gerekir. Bu seçeneği belirlediğinizde, Visual Studio herhangi bir web tabanlı uygulama için gerekli olan gerekli dosyaları eklemek için gerekli adımları gerçekleştirir.
  2. Bizim durumumuzda " webservice.asmx " olarak verilen projenize bir isim verin . Ardından proje dosyalarının saklanacağı bir yer verdiğinizden emin olun.

Tamamlandığında, Visual Studio 2013'te çözüm gezgininizde oluşturulan proje dosyasını göreceksiniz.

Adım 3) Bu adımda,

Projemize bir Web servis dosyası ekleyeceğiz

  1. İlk olarak aşağıda gösterildiği gibi proje dosyasına sağ tıklayın
  1. Proje dosyasına sağ tıkladıktan sonra, bir web hizmeti dosyası eklemek için "Ekle-> Web Hizmeti (ASMX) seçeneğini seçme şansınız vardır. Web hizmeti adı dosyası için bir Eğitim Hizmeti adı vermeniz yeterlidir.

Yukarıdaki adım, web hizmeti dosyasının adının girilebileceği bir iletişim kutusu açacaktır. Bu nedenle, aşağıdaki iletişim kutusunda, dosya adı olarak TutorialService adını girin.

Adım 4) Aşağıdaki kodu Eğitim Hizmeti asmx dosyanıza ekleyin. Aşağıdaki kod parçası, SOAP mesajı oluşturulduğunda SOAP Başlığını değiştirmek için kullanılacak özel bir sınıf eklemek için kullanılır. Şimdi SOAP başlığına güvenlik kimlik bilgileri eklemek istediğimiz için, bu adım gereklidir.

return "This is a Guru99 Web Service";}public class AuthHeader : SoapHeader{public string UserName;public string Password;}}

Kod Açıklaması: -

  1. Şimdi denilen ayrı bir sınıf yaratıyor AuthHeader tipi olan SoapHeader sınıfına . SOAP başlığında geçirilenleri değiştirmek istediğinizde, yerleşik .Net SoapHeader sınıfını kullanan bir sınıf oluşturmanız gerekir. SOAPheader'ı özelleştirerek, artık web hizmeti çağrıldığında bir 'Kullanıcı Adı' ve 'Parola' geçirme yeteneğine sahibiz.
  2. Daha sonra string türünde olan 'UserName' ve 'Password' değişkenlerini tanımlarız. Web servisine aktarılan kullanıcı adı ve şifre değerlerini tutmak için kullanılacaktır.

Adım 5) Sonraki adım olarak, aşağıdaki kodun aynı TutorialService.asmx dosyasına eklenmesi gerekir . Bu kod aslında web hizmetimizin işlevini tanımlar. Bu işlev, istemciye "Bu bir Guru99 Web hizmetidir" dizesi döndürür. Ancak bu sefer, dize yalnızca istemci uygulaması kimlik bilgilerini web hizmetine iletirse döndürülür.

public class TutorialService : System.Web.Services.WebService{public AuthHeader Credentials;[SoapHeader("Credentials")][WebMethod]public string Guru99WebService(){if (Credentials.UserName.ToLower() != "Guru99" ||Credentials.Password.ToLower() != "Guru99Password"){throw new SoapException("Unauthorized",SoapException.ClientFaultCode);}eisereturn "This is a Guru99 Web service";}

Kod Açıklaması: -

  1. Burada, önceki adımda oluşturulan AuthHeader sınıfının bir nesnesini oluşturuyoruz. Bu nesne , kullanıcı adı ve parolanın yakından incelenebileceği Guru99Webservice'imize aktarılacaktır .
  2. [SoapHeader] özniteliği artık Web hizmeti çağrıldığında, kullanıcı adı ve parolasının geçirilmesi gerektiğini belirtmek için kullanılmaktadır.
  3. Bu kod bloğunda, aslında web servisi çağrıldığında geçirilen kullanıcı adı ve şifreyi inceliyoruz. Kullanıcı adı "Guru99" a eşitse ve şifre "Guru99Password" e eşitse, "Bu bir Guru99 Web hizmetidir" mesajı istemciye iletilir. Aksi takdirde, yanlış kullanıcı kimliği ve şifre girilirse müşteriye bir hata gönderilecektir.

Kod başarıyla yürütülürse, kodunuzu tarayıcıda çalıştırdığınızda aşağıdaki Çıktı gösterilecektir.

Çıktı:

Yukarıdaki çıktı, program çalıştırıldığında gösterilir, bu da Web hizmetinin artık kullanılabilir olduğu anlamına gelir. Servis Açıklaması linkine tıklayalım.

Hizmet açıklamasından, artık kullanıcı adı ve parolanın WSDL dosyasının öğeleri olduğunu görebileceksiniz. Web hizmeti çağrıldığında bu parametrelerin gönderilmesi gerekir.

Web Hizmeti Güvenliği En İyi Uygulamaları

Aşağıda, Web hizmetleriyle çalışırken dikkat edilmesi gereken güvenlik hususları verilmiştir.

  1. Denetim ve Günlük yönetimi - Web hizmetlerine gelen tüm istekleri günlüğe kaydetmek için uygulama günlüğünü kullanın. Bu, web hizmetini kimin çağırdığına dair ayrıntılı bir rapor verir ve herhangi bir güvenlik ihlali meydana gelirse Etki analizine yardımcı olabilir.

  2. Web servisine çağrı akışı - Web servislerindeki çağrıların akışını not etmeye çalışın. Varsayılan olarak, bir uygulama, bu web hizmetleri arasında Kimlik Doğrulama belirteçleri geçirilerek birden çok web hizmeti isteğini çağırabilir. Web hizmetleri arasındaki tüm aramaların izlenmesi ve günlüğe kaydedilmesi gerekir.

  3. Hassas Bilgiler - Günlük girişlerinize parolalar veya kredi kartı numaraları veya diğer gizli bilgiler gibi hassas bilgileri eklemeyin. Bu bilgilerden herhangi birine sahip bir olay varsa, oturum açmadan önce atılması gerekir.

  4. Ticari İşlemleri Takip Edin - Önemli ticari operasyonları izleyin. Örneğin, özellikle hassas yöntemlere ve iş mantığına erişimi kaydetmek için uygulamanızı araç olarak kullanın. Bir çevrimiçi alışveriş uygulamasına bir örnek verelim. Tipik bir uygulamada satın alınacak ürünlerin seçilmesi, sepete yüklenen ürünler ve ardından son satın alma gibi birden fazla adım vardır. Tüm bu iş akışının web hizmeti tarafından izlenmesi gerekiyor.

  5. Doğru Kimlik Doğrulama - Kimlik doğrulama, istemcilerin bu kimliği kanıtlayabilen belirli bir kimlik bilgileri kümesini kullanarak web hizmetiyle kimliklerini oluşturabilecekleri mekanizmadır. Kullanıcı kimlik bilgilerini hiçbir zaman saklamamalıdır ve bu nedenle, web hizmetini aramak için WS Security kullanılıyorsa, web hizmetinin SOAP başlığında gönderilen kimlik bilgilerini saklamaması gerektiği unutulmamalıdır. Bunlar web servisi tarafından atılmalıdır.

Özet

  • SOAP, Web hizmetlerine çağrı yapıldığında ek güvenlik sağlamak için WS Güvenliği adlı ek bir katman sağlar.
  • WS Güvenliği, basit bir kullanıcı adı veya parola ile çağrılabilir veya kimlik doğrulama için İkili sertifikalarla birlikte kullanılabilir
  • Net'te, Web hizmetini, SOAP başlık öğesinin bir parçası olarak bir kullanıcı adı ve parolaya sahip olacak şekilde özelleştirebileceğimizi gördük.