SOAP Örneğiyle Web Hizmeti(WS) Güvenlik Eğitimi
WS Güvenliği nedir?
WS Güvenliği, bir Web hizmetinin parçası olarak veri alışverişi yapıldığında güvenliği ele alan bir standarttır. Bu, SOAP'ı web hizmetleri oluşturmak için çok popüler yapan önemli bir özelliktir.
Güvenlik herhangi bir web uygulamasında önemli bir özelliktir. Hemen hemen tüm web uygulamaları internete açık olduğundan, web uygulamalarına yönelik bir güvenlik tehdidi olasılığı her zaman vardır. Bu nedenle, web tabanlı uygulamalar geliştirirken, uygulamanın her zaman güvenlik göz önünde bulundurularak tasarlandığından ve geliştirildiğinden emin olunması önerilir.
Güvenlik Tehditleri ve Karşı Tedbir
Bir web uygulamasına zarar verebilecek güvenlik tehditlerini anlamak için basit bir web uygulaması 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, istemci ile sunucu arasında web üzerinden 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 orijinal olarak tanımlayan dijital bir sertifikaya sahip olacaktır.
İstemci ile sunucu arasındaki standart bir HTTPS iletişiminde aşağıdaki 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 ile 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ışması durumunda, şifreleneceği için bu verileri okuyamamalarını sağlar.
Ancak yukarıdaki güvenlik türü her durumda çalışmayacaktır. İstemcinin birden fazla sunucuyla konuşabileceği bir zaman gelebilir. Aşağıda verilen bir örnek, aynı anda hem veritabanıyla hem de web sunucusuyla konuşan bir istemciyi göstermektedir. Bu gibi durumlarda bilgilerin tamamı https protokolünden geçemez.
İşte bu noktada SOAP, WS Güvenlik spesifikasyonunu uygulamaya koyarak bu tür engellerin üstesinden gelmek için devreye giriyor. Bu spesifikasyonla güvenlikle ilgili tüm veriler SOAP başlık elemanında tanımlanır.
Başlık elemanı aşağıda belirtilen 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ık, hedefe ulaştığında mesajın şifresinin çözülebilmesi için gerekli şifreleme anahtarlarını içerecektir.
Birden fazla sunucunun bulunduğu ortamlarda, yukarıdaki SOAP kimlik doğrulama tekniği aşağıdaki ş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 bir HTTP isteğiyle veritabanı sunucusuna iletildiğini varsayalım, veritabanı bunu yapacak doğru mekanizmalara sahip olmadığından şifrenin çözülemeyeceğini varsayalım.
- Yalnızca istek Web sunucusuna bir SOAP protokolü olarak ulaştığında, mesajın şifresini çözebilecek ve uygun yanıtı istemciye geri gönderebilecektir.
WS Güvenlik standardının aşağıdaki amaçlar için nasıl kullanılabileceğini sonraki konularda göreceğiz. SABUN.
Web Hizmeti Güvenlik Standartları
Önceki bölümde tartışıldığı gibi, WS-Güvenlik 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, Kullanıcı AdıToken adı verilen özel bir öğeyi tanımlar. Bu, kullanıcı adını ve şifreyi web servisine iletmek için kullanılır.
Diğer yol ise 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 diyagramda güvenlik modelinin WS Security'de nasıl çalıştığının akışı gösterilmektedir
Yukarıdaki iş akışında gerçekleşen adımlar aşağıda verilmiştir
- Web hizmeti istemcisinden Güvenlik Simgesi Hizmetine bir istek gönderilebilir. Bu hizmet, gerçek SOAP web hizmetine kullanıcı adları/şifreler veya sertifikalar sağlamak için özel olarak oluşturulmuş bir ara web hizmeti olabilir.
- Güvenlik belirteci daha sonra Web hizmeti istemcisine iletilir.
- Web hizmeti istemcisi daha sonra web hizmetini aradı, ancak bu sefer güvenlik belirtecinin SOAP mesajına dahil edilmesini sağladı.
- 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 biçimini gösterir. Şimdi aşağıdaki kod parçasına dayanarak, SOAP mesajı, biri Kullanıcı Adı ve diğeri Şifre 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ı aslında istemciler ve sunucu arasında iletildiğinde, mesajın kullanıcı kimlik bilgilerini içeren kısmı yukarıda gösterilene benzeyebilir. Wsse element adı SOAP için tanımlanmış özel bir element olup, güvenlik bazlı bilgiler içerdiği anlamına gelir.
Güvenli web hizmetleri nasıl oluşturulur?
Şimdi SOAP web servis güvenliği örneğine bakalım. SOAP bölümünde daha önce gösterilen örnek üzerine bir web hizmeti güvenliği oluşturacağız ve ona bir güvenlik katmanı ekleyeceğiz.
Örneğimizde, web hizmetini çağıran uygulamaya bir dize döndürmek için kullanılacak basit bir web hizmeti oluşturacağız. Ancak bu sefer web hizmeti çağrıldığında kimlik bilgilerinin arayan hizmete sağlanması gerekiyor. SOAP web servisimizi oluşturmak ve ona güvenlik tanımını eklemek için aşağıdaki adımları takip edelim.
) 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çıklanmıştır
) 2 Adım Bu adımda,
- İlk önce seçtiğinizden emin olun. C# ASP.NET Web uygulaması için web şablonu. Web servisleri projesi oluşturmak için projenin bu türde olması gerekir. Bu seçeneği seçerek, Visual Studio daha sonra 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.” Daha sonra proje dosyalarının saklanacağı konumu belirttiğinizden emin olun.
İşlem tamamlandığında Visual Studio 2013'teki çözüm gezgininizde proje dosyasının oluşturulduğunu 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 “Add->Web Service (ASMX)” seçeneğini seçerek web servis dosyası ekleme şansınız olur. Web hizmeti adı dosyası için Eğitim Hizmetinin adını vermeniz yeterlidir.
Yukarıdaki adım, web servis dosyasının adının girilebileceği 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; } }
Kod Açıklaması:-
- Ş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 iletilenleri değiştirmek istediğinizde, .Net'in yerleşik SoapHeader sınıfını kullanan bir sınıf oluşturmanız gerekir. SOAPheader'ı özelleştirerek, artık web servisi çağrıldığında bir 'Kullanıcı Adı' ve 'Şifre' iletme olanağına sahibiz.
- 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 istemciye "Bu bir Guru99 Web hizmetidir" dizesini döndürür. Ancak bu kez dize yalnızca istemci uygulamasının kimlik bilgilerini web hizmetine iletmesi durumunda 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); } eise return "This is a Guru99 Web service"; }
Kod Açıklaması:-
- Burada, önceki adımda oluşturduğumuz AuthHeader sınıfının bir nesnesini yaratıyoruz. Bu nesne bizimkine aktarılacak Guru99Web hizmeti 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 aslında web servis çağrıldığında geçirilen kullanıcı adı ve şifreyi inceliyoruz. Kullanıcı adı “Guru99” ve şifre “Guru99Password” ise istemciye “Bu bir Guru99 Web hizmetidir” mesajı iletilir. Aksi halde yanlış kullanıcı kimliği ve şifrenin iletilmesi durumunda istemciye 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ı:
Program çalıştırıldığında yukarıdaki çıktı gösterilir; bu, Web hizmetinin artık kullanılabilir olduğu anlamına gelir. Hizmete 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 dikkat edilmesi gereken güvenlik hususları şunlardır:
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 başlattığı hakkında ayrıntılı bir rapor verir ve herhangi bir güvenlik ihlali meydana gelmesi durumunda Etki analizine yardımcı olabilir.
2. Web servisine yapılan aramaların akışı – Web servislerindeki çağrıların akışını not etmeye çalışın. Varsayılan olarak bir uygulama, bu web hizmetleri arasında geçirilen Kimlik Doğrulama belirteçleriyle birden fazla web hizmeti isteğini çağırabilir. Web servisleri arasındaki tüm çağrıların izlenmesi ve kaydedilmesi gerekir.
3. Hassas Bilgiler – Günlük girişlerinize şifre veya kredi kartı numarası gibi hassas bilgileri veya başka herhangi bir gizli bilgiyi eklemeyin. Bu bilgilerden herhangi birini içeren bir etkinlik varsa, oturum açılmadan önce bunun atılması gerekir.
4. İşi Takip Edin Operaleri – Önemli iş operasyonlarını takip edin. Örneğin, uygulamanızı özellikle hassas yöntemlere ve iş mantığına erişimi kaydedecek şekilde düzenleyin. Bir online alışveriş uygulaması örneğini ele alalım. 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ıtlayabilecek belirli bir kimlik bilgileri kümesini kullanarak web hizmetiyle kimliklerini oluşturabilecekleri mekanizmadır. Kullanıcı kimlik bilgileri hiçbir zaman saklanmamalıdır ve bu nedenle, web hizmetini çağırmak için WS Security kullanılıyorsa, web hizmetinin SOAP başlığında gönderilen kimlik bilgilerini saklamaması gerektiğine dikkat edilmelidir. Bunların web hizmeti tarafından atılması gerekir.
ÖZET
- SOAP, Web hizmetlerine çağrı yapıldığında ek güvenlik sağlamak için WS Güvenliği adı verilen ek bir katman sağlar.
- WS Security, basit bir kullanıcı adı veya parolayla çağrılabilir veya kimlik doğrulama için İkili sertifikalarla birlikte kullanılabilir
- Bunu da gördük . Net Web hizmetini, SOAP başlık öğesinin bir parçası olarak bir kullanıcı adı ve parolanın iletilmesini sağlayacak şekilde özelleştirebiliriz.