SOAP Örneği ile Web Servisi (WS) Güvenliği
⚡ Akıllı Özet
Web Servisi (WS) Güvenliği, SOAP web servis çağrısı sırasında değiş tokuş edilen verileri koruyan bir standarttır. Bu kaynak, güvenlik tehditlerini ve karşı önlemleri, WS-Güvenlik standartlarını, kimlik bilgileriyle güvenli bir web servisi oluşturmayı ve web servis güvenliği en iyi uygulamalarını açıklamaktadır.
WS Güvenliği nedir?
WS Security, bir web hizmetinin parçası olarak veri alışverişi yapılırken güvenliği ele alan bir standarttır. Bu, SOAP'ı web hizmetleri oluşturmak için ç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ına yönelik bir güvenlik tehdidi her zaman mevcuttur. Bu nedenle, geliştirme aşamasında güvenlik önlemlerine dikkat edilmelidir.ping Web tabanlı uygulamalar söz konusu olduğunda, uygulamanın güvenlik göz önünde bulundurularak tasarlanması ve geliştirilmesi her zaman tavsiye edilir.
Güvenlik Tehditleri ve Karşı Tedbir
Bir web uygulamasına yönelik olası güvenlik tehditlerini anlamak için, basit bir web uygulaması senaryosuna bakalım ve güvenlik açısından nasıl çalıştığını inceleyelim.
HTTP için mevcut güvenlik önlemlerinden biri de HTTPS protokolüdür. HTTPS, istemci ve sunucu arasında web üzerinden güvenli iletişimin yoludur. HTTPS, güvenli iletişim için Güvenli Soket Katmanı (SSL) kullanır. İstemci ve sunucu arasında herhangi bir iletişim gerçekleştiğinde, hem istemci hem de sunucu kendilerini gerçek olarak tanımlamak için dijital bir sertifikaya sahip olacaktır.
İstemci ve sunucu arasında standart bir HTTPS iletişiminde şu adımlar gerçekleşir:
- İstemci, istemci sertifikası aracılığıyla sunucuya bir istek gönderir. Sunucu, istemci sertifikasını gördüğünde, yanıtın yalnızca bu istemciye geri dönmesi gerektiğini bilmek için önbellek sistemine bir not alır.
- Sunucu daha sonra sertifikasını göndererek istemciye kimliğini doğrular. Bu, istemcinin doğru sunucuyla iletişim kurmasını sağlar.
- Bundan sonra istemci ve sunucu arasındaki tüm iletişim şifrelenir. Bu, başka kullanıcıların güvenliği kırmaya ve gerekli verilere ulaşmaya çalışması durumunda, verilerin şifrelenmiş olması nedeniyle bunları okuyamayacaklarını garanti eder.
Ancak yukarıdaki güvenlik türü her durumda işe yaramayacaktır. İstemcinin birden fazla sunucuyla iletişim kurması gereken durumlar olabilir. Aşağıda verilen örnekte, bir istemcinin aynı anda hem veritabanı hem de web sunucusuyla iletişim kurduğu gösterilmektedir. Bu gibi durumlarda, tüm bilgiler HTTPS protokolü üzerinden iletilemez.
İşte bu noktada SOAP, WS Güvenlik spesifikasyonu sayesinde bu tür engellerin üstesinden gelmek için devreye giriyor. Bu spesifikasyonla, güvenlikle ilgili tüm veriler SOAP başlık öğesinde tanımlanır. Başlık öğesi aşağıdaki bilgileri içerebilir:
- SOAP gövdesindeki mesaj herhangi bir güvenlik anahtarı ile imzalanmışsa bu anahtar başlık elemanında tanımlanabilir.
- SOAP gövdesindeki herhangi bir öğe şifrelenmişse, başlıkta mesajın hedefe ulaştığında şifresinin çözülebilmesi için gerekli şifreleme anahtarları bulunur.
Çoklu sunucu ortamında, yukarıdaki SOAP kimlik doğrulama tekniği şu şekilde yardımcı olur:
- SOAP gövdesi şifrelenmiş olduğundan yalnızca web servisini barındıran web sunucusu tarafından şifresi çözülebilecektir. Bunun nedeni SOAP protokolünün tasarlanma şeklidir.
- Mesajın HTTP isteğiyle veritabanı sunucusuna iletildiğini varsayalım; veritabanında şifre çözme mekanizmaları bulunmadığı için mesaj çözülemez.
- İstek ancak SOAP protokolü olarak web sunucusuna ulaştığında sunucu mesajı çözebilecek ve istemciye uygun yanıtı geri gönderebilecektir.
Sonraki konularda WS Güvenlik standardının nasıl kullanılabileceğini göreceğiz. SABUN.
Web Hizmeti Güvenlik Standartları
Önceki bölümde de ele alındığı gibi, WS-Security standardı, güvenlik tanımının SOAP başlığına dahil edilmesini esas alır. SOAP başlığındaki kimlik bilgileri 2 şekilde yönetilir.
İlk olarak, UsernameToken adı verilen özel bir öğe tanımlanır. Bu, kullanıcı adı ve şifreyi web servisine iletmek için kullanılır. Diğer bir yöntem ise BinarySecurityToken aracılığıyla ikili bir belirteç kullanmaktır. Bu, Kerberos veya X.509 gibi şifreleme tekniklerinin kullanıldığı durumlarda kullanılır.
Aşağıdaki diyagram, WS Security'de güvenlik modelinin nasıl çalıştığının akışını göstermektedir.
Yukarıdaki iş akışında gerçekleşen adımlar aşağıdadır:
- Web servis istemcisinden Güvenlik Token Servisine bir istek gönderilebilir. Bu servis, asıl SOAP web servisine kullanıcı adları/şifreler veya sertifikalar sağlamak üzere özel olarak oluşturulmuş bir ara web servisi olabilir.
- Güvenlik belirteci daha sonra Web hizmeti istemcisine iletilir.
- Ardından web servis istemcisi web servisini çağırır, ancak bu sefer güvenlik belirtecinin SOAP mesajına yerleştirildiğinden emin olur.
- Web hizmeti daha sonra kimlik doğrulama belirteciyle birlikte SOAP mesajını anlar ve güvenlik belirtecinin orijinal olup olmadığını görmek için Güvenlik Belirteci hizmetiyle iletişime geçebilir.
Aşağıdaki kod parçası, WSDL belgesinin bir parçası olan kimlik doğrulama bölümünün formatını göstermektedir. Aşağıdaki kod parçasına göre, SOAP mesajı, biri Kullanıcı Adı diğeri Parola olmak üzere 2 ek öğe içerecektir.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType> </xs:element>
SOAP mesajı istemciler ve sunucu arasında iletilirken, kullanıcı kimlik bilgilerini içeren mesaj bölümü yukarıda gösterilene benzer bir görünüme sahip olabilir. `wsse` öğe adı, SOAP için tanımlanmış özel bir öğe adıdır ve güvenlik tabanlı bilgiler içerdiği anlamına gelir.
Güvenli web hizmetleri nasıl oluşturulur?
Şimdi bir SOAP web servis güvenliği örneğine bakalım. SOAP bölümünde daha önce gösterilen örneği temel alarak bir web servis güvenliği oluşturacağız ve buna bir güvenlik katmanı ekleyeceğiz.
Örneğimizde, web servisini çağıran uygulamaya bir dize döndürecek basit bir web servisi oluşturacağız. Ancak bu sefer, web servisi çağrıldığında, çağıran servise kimlik bilgilerinin sağlanması gerekecek. SOAP web servisimizi oluşturmak ve ona güvenlik tanımını eklemek için aşağıdaki adımları izleyelim.
) 1 Adım İlk adım boş bir alan oluşturmaktır Asp.Net Web uygulaması. 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 sunacaktır. Bu bir sonraki adımda açıklanmaktadır.
) 2 Adım Bu adımda,
- İlk önce seçtiğinizden emin olun. C# ASP.NET web uygulaması için web şablonu. Web servis projesi oluşturmak için projenin bu türde olması gerekir. Bu seçeneği seçtiğinizde, Visual Studio, herhangi bir web tabanlı uygulama tarafından ihtiyaç duyulan gerekli dosyaları eklemek için gerekli adımları gerçekleştirecektir.
- Projenize bizim durumumuzda şu şekilde verilen bir isim verin:webservice.asmx"Sonra proje dosyalarının saklanacağı konumu belirtmeyi unutmayın."
İşlem tamamlandığında, Visual Studio 2013'teki çözüm gezgininde oluşturulan proje dosyasını göreceksiniz.
) 3 Adım Bu adımda, projemize bir web servis dosyası ekleyeceğiz.
- Öncelikle, aşağıda gösterildiği gibi proje dosyasına sağ tıklayın.
- Proje dosyasına sağ tıkladığınızda, web servis dosyası eklemek için "Ekle -> Web Servisi (ASMX)" seçeneğini seçebilirsiniz. Web servis dosyası adı için "Eğitim Servisi" adını girmeniz yeterlidir.
Yukarıdaki adım, web servis dosyasının adını girebileceğiniz bir iletişim kutusu açacaktır. Bu nedenle, aşağıdaki iletişim kutusuna dosya adı olarak "TutorialService" adını girin.
) 4 Adım Aşağıdaki kodu Tutorial Service 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. Artık SOAP başlığına güvenlik kimlik bilgileri eklemek istediğimizden, bu adım gereklidir.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Açıklama:
- Şimdi adında ayrı bir sınıf oluşturuyoruz. Kimlik Doğrulama Başlığı hangi tip SoapHeader sınıfıSOAP başlığında neyin iletileceğini değiştirmek istediğinizde, .Net'in yerleşik SoapHeader sınıfını kullanan bir sınıf oluşturmanız gerekir. SOAP başlığını özelleştirerek, web servisi çağrıldığında 'Kullanıcı Adı' ve 'Şifre' iletme olanağına sahip oluyoruz.
- Daha sonra string tipinde 'KullanıcıAdı' ve 'Şifre' değişkenlerini tanımlıyoruz. Web servisine iletilen kullanıcı adı ve şifre değerlerini tutmak için kullanılacaklardır.
) 5 Adım Bir sonraki adım olarak, aynı koda aşağıdaki kodun eklenmesi gerekiyor TutorialService.asmx dosyasıBu kod aslında web servisimizin işlevini tanımlar. Bu işlev "Bu bir" dizesini döndürür. Guru"99 Web servisi" istemciye iletilir. Ancak bu sefer, dize yalnızca istemci uygulaması kimlik bilgilerini web servisine ilettiğinde döndürülecektir.
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); } else return "This is a Guru99 Web service"; }
Code Açıklama:
- Burada, önceki adımda oluşturduğumuz AuthHeader sınıfının bir nesnesini yaratıyoruz. Bu nesne bizimkine aktarılacak Guru99Webservice Kullanıcı adı ve şifrenin yakından incelenebileceği yer.
- [SoapHeader] özelliği artık Web hizmeti çağrıldığında kullanıcı adı ve parolanın iletilmesi gerektiğini belirtmek için kullanılıyor.
- Bu kod bloğunda, web servisi çağrıldığında iletilen kullanıcı adı ve şifreyi inceliyoruz. Kullanıcı adı "Guru99” ve şifre “Guru"99Password" mesajının ardından "Bu bir Guru"99 Web servisi" istemciye iletilir. Aksi takdirde, yanlış kullanıcı kimliği ve şifre iletilirse istemciye bir hata gönderilir.
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örüntülenir; bu da web servisinin artık kullanılabilir olduğu anlamına gelir. Şimdi Servis'e tıklayalım. Descriptiyon bağlantısı.
Hizmet açıklamasından artık kullanıcı adı ve şifrenin hizmetin unsurları olduğunu görebileceksiniz. wsdl dosya. Web hizmeti çağrıldığında bu parametrelerin gönderilmesi gerekir.
Web Hizmeti Güvenliği En İyi Uygulamaları
Web servisleriyle çalışırken dikkate alınması gereken güvenlik hususları şunlardır:
- Denetim ve Kayıt Yönetimi – Web servislerine gelen tüm istekleri kaydetmek için uygulama günlük kaydını kullanın. Bu, web servisini kimin çağırdığına dair ayrıntılı bir rapor sunar ve herhangi bir güvenlik ihlali meydana gelmesi durumunda etki analizine yardımcı olabilir.
- Web servisine yapılan çağrıların akışı – Web servislerindeki çağrı akışını not etmeye çalışın. Varsayılan olarak, bir uygulama bu web servisleri arasında iletilen kimlik doğrulama belirteçleriyle birden fazla web servis isteği gönderebilir. Web servisleri arasındaki tüm çağrıların izlenmesi ve kaydedilmesi gerekir.
- Hassas bilgi – Şifreler, kredi kartı numaraları veya diğer gizli bilgiler gibi hassas bilgileri kayıtlarınıza eklemeyin. Bu tür bilgiler içeren bir olay varsa, kayda geçmeden önce silinmesi gerekir.
- Track İşletmesi Operaleri - Track önemli iş operasyonu. Örneğin, özellikle hassas yöntemlere ve iş mantığına erişimi kaydetmek için uygulamanızı yapılandırın. Çevrimiçi bir mağaza örneğini ele alalım.ping Başvuru süreci. Tipik bir başvuruda, satın alınacak ürünlerin seçilmesi, ürünlerin sepete eklenmesi ve ardından nihai satın alma işlemi gibi birden fazla adım bulunur. Bu iş akışının tamamının yönetilmesi gerekir. tracWeb servisi tarafından sağlanmaktadır.
- Doğru Kimlik Doğrulama – Kimlik doğrulama, istemcilerin kimliklerini kanıtlayabilecek belirli bir kimlik bilgisi kümesi kullanarak web servisiyle kimliklerini doğrulamalarını sağlayan mekanizmadır. Kullanıcı kimlik bilgileri asla saklanmamalıdır; bu nedenle, web servisini çağırmak için WS Security kullanılıyorsa, web servisinin SOAP başlığında gönderilen kimlik bilgilerini saklamaması gerektiği unutulmamalıdır. Bu bilgiler web servisi tarafından atılmalıdır.














