|  | 
        
            | 
                    
                        | SOAP Header Kullanarak Web Servislerine Kimlik Denetimi Eklemek |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Web Servis teknolojisi 
platformları, mesafeleri, dilleri ve kültürleri aşarak bazı hizmetleri paylaşabilmek 
amacıyla geliştirilmiştir. Bazen geliştirdiğimiz bu servisler içerik olarak hassas 
ve önemli bilgiler taşıyabilir ve bu servisleri ancak belirli kişilerin kullanmasına 
izin verilebilir. İşte bir Web Servis hizmetinin, imtiyaz sahibi belirli kişiler 
tarafından kullanılmasını sağlamanın en pratik yolu Kimlik Denetimi yapmaktır. 
 
Bir Web Servis uygulamasında kimlik denetimi SOAP Headers 
  aracılığıyla yapılır. Bu çalışmada üç temel adımımız var: 
 Birincisi; bir web servisi hazırlamak,
 İkincisi; web servisimize kimlik denetimi eklemek,
 Üçüncüsü; kimlik denetimli bir web servisini kullanmak.
 
 
 1. Bir Web Servisi Hazırlamak
 
 Öncelikle web servisi projemizi başlatalım. Bunun için Visul 
studio.Net te yeni projeler menüsünden proje tipi olarak C# ve Şablon olarak da 
Web Service seçelim ve proje adını "KimikDenetimliWebServis" olarak 
tanımlayalım.
 
 
  
 Visual Studio bize uygulamamız için gerekli bileşenlerle 
donatılmış bir proje oluşturur. Bu bileşenlerden biri de Web Servis dosyası olan 
"Service1.asmx" dir. İsimlendirme için bir çok satır kodu değiştirmekle 
uğraşmamak için bu dosyayı siliyoruz ve Project menüsünden Add Web 
Service... seçeneğini tıklayıp uygulamıza BasitAraclar isimli yeni bir Web 
Service dosyası ekliyoruz.
 
 
  
 Evet şimdi projemiz içerisinde "BasitAraclar.asmx" dosyasıyla 
hazır. Dosyayı kod penceresinde açarak kodumuzu yazmaya başlayabiliriz. Odak 
noktamız kimlik denetimi olacağından basit bir web metodu yazacağız.
 
 
 
  Metodumuz kendisine verilen altLimit ile ustLimit 
tamsayıları arasında rastgele bir sayı üreterek bunu çağırıldığı noktaya 
iletiyor. Kodumuzu hemen test edelim. Ancak çalıştırmadan önce uygulamanın 
başlangıç noktası olarak web servisimizi tanımlamalıyız. Solution Explorer 
da BasitAraclar.asmx üzerine sağ tıklayalım ve Set As Start Page 
diyelim. Şimdi F5 e basarak uygulamamızı çalıştırabiliriz. 
    | [WebMethod]
 public int SayiUret(int altLimit, int ustLimit)
 {
 Random rastgele=new Random();
 return rastgele.Next(altLimit, ustLimit);
 }
 
 |  
 BasitAraclar web servisimiz için ekrana gelecek olan web 
sayfasında bulunan SayiUret linkine tıklayalım. Açılan sayfada metodumuzu 
denemek amacıyla alt ve üst limitleri girelim ve invoke butonuna basalım.
 
 
  
 Butona her tıkladığımızda alt limitle üst limit arasında 
değişen rastgele üretilmiş sayılar sonuç sayfasıyla bize gönderilecektir.
 
 Şimdi servisimize bu iki int parametreyi, yani altLimit ve 
ustLimit sayılarını taşıyan mekanizmaya bir bakalım. Web servisleri veri alış 
verişinde SOAP (Simple Object Access Protocol) kullanırlar. SOAP sayesinde veri 
platform bağımsız olarak ve güvenlik duvarlarınca engellenmeden her türlü ortama 
aktarılabilir. Burada konumuz SOAP olmadığından SOAP mesajına genel olarak bir 
bakmamız yeterli. İki int parametre alan metodun tanımlanışı açıkça belli 
oluyor.
 
 <?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
 <SayiUret xmlns="http://tempuri.org/">
 <altLimit>int</altLimit>
 <ustLimit>int</ustLimit>
 </SayiUret>
 </soap:Body>
 </soap:Envelope>
 
 Basit bir web servisi hazırladık ve testimizi de yaptık. En 
son SOAP yapısını da inceleyince birinci aşamayı tamamlamış olduk.
 
 2. Web Servisine Kimlik Denetimi Eklemek
 
 Şimdi de servisimize kimlik denetimi ekleyelim. Bu işlemi basitçe 
  ve adımlar şeklinde gerçekleştireceğiz.
 
 Birinci adım, aşağıdaki isim alanını uygulamamıza ekeleyelim.
 
 
 
  İkinci adım, AuthHeader adında  SoapHeader classından miras 
alma yoluyla türetilmiş yeni bir sınıf oluşturalım. 
    | using System.Web.Services.Protocols; |  
 
 
  Sınıfımız iki public üyeye sahip. Bunlar string veri tipinde. 
  Bu üyelerin amacı kullanıcıadı ve parola bilgilerini taşıyarak 
  kimlik denetiminde kullanılmalarını sağlamak. 
    | // Kimlik denetimi için kullanılacak sınıf.
 public class AuthHeader : SoapHeader
 {
 public string Username;
 public string Password;
 }
 
 |  
 Üçüncü adım, kimlik denetimi bilgilerini web servis uygulaması içinde 
kullanılabilir hale getirmek için, BasitAraclar sınıfı içerisinde, tasarladığımız AuthHeader veri tipinde public 
bir field tanımlamak.
 
 
 
  Dördüncü adım, kimlik denetimi yapmak istediğimiz servise bir attribute 
eklemek. 
    | public AuthHeader KimlikDenetimi; |  
 
 
  Beşinci adım, web servis uygulamamızda tanımladığımız ve SoapHeader attribute 
içerisinde referans gösterdiğimiz KimlikDenetim isimli değişkeni kullanarak kod 
içerisinde denetimimizi gerçekleştirelim. 
    | [SoapHeader("KimlikDenetimi")] |  
 
 
  Evet buraya kadar olan işlemlerle, kimlik denetimi kullanan 
bir web servis uygulaması geliştirmiş olduk. Sizin de tahmin edebileceğiniz gibi 
bu uygulamanın çalıştırılması denetimsiz bir web servisi uygulamasından farklı 
olacaktır. Bunun için kullanıcı kimlik bilgilerinin SOAP Header’ a yüklenerek 
web servisine gönderilmesi gerekir. Şimdi F5 tuşuna basarak uygulamamızı 
çalıştıralım ve yeni SOAP tanımımıza bir göz atalım. 
    | if(KimlikDenetimi.Username=="test" &&
 KimlikDenetimi.Password=="test")
 {
 // Kimlik denetimi: kullanıcı sistemde tanımlı
 Random rastgele=new Random();
 return rastgele.Next(altLimit, ustLimit);
 }
 else
 // Kimlik denetimi: kullanıcı yetkisiz
 return 0;
 
 |  
 <?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Header>
 <AuthHeader xmlns="http://tempuri.org/">
 <Username>string</Username>
 <Password>string</Password>
 </AuthHeader>
 </soap:Header>
 <soap:Body>
 <SayiUret xmlns="http://tempuri.org/">
 <altLimit>int</altLimit>
 <ustLimit>int</ustLimit>
 </SayiUret>
 </soap:Body>
 </soap:Envelope>
 
 Açıkça görüleceği üzere SOAP tanımımıza yeni bir bölüm eklenmiş: 
  HEADER. Güvenlik bilgisi BODY bölümü içerisinde değil HEADER bölümü içerisinde 
  taşınmaktadır. Uygulamayı çalıştırmayı denediyseniz hata sayfasıyla karşılaşmışsınızdır. 
  Bu kaçınılmazdır. Çünkü web servisi yardım sayfasıyla HEADER oluşturmanız mümkün 
  değildir. Şimdi yapmamız gereken kimlik denetimi için gerekli SOAP ı yapılandırabilecek 
  bir uygulama geliştirmek.
 3. Kimlik Denetimli Bir Web Servisini Kullanmak
 
 Basit ve hızlı olması nedeniyle "Console" uygulamasını 
  kullanacağız. Öncelikle yeni bir Visual Studio.Net Console Projesi başlatalım 
  ve adını KimlikDenetimliWSTesti diyelim. Hemen arkasından uygulamamıza nir referans 
  ekleyelim.
  Add Web Reference.. seçeneğiyle birlikte Web Servisiniyle ilgili bilginin 
nereden alınacağını tanımlamamızın gerektiği bir ekranla karşılaşacağız. Burada
Web services on the local machine seçeneğini kullanarak geliştirdiğimiz 
örneği bulalım.  Web referans adı olarak DenetimliServis yazalım ve Add Reference butonuna 
basarak, uygulamamıza referansı ekleyelim.Şimdi test kodumuzu 
yazabiliriz. Konsol ekranında kullanıcı ilk olarak alt limit ve üst limit 
bilgilerini girmesi gerektiği mesajıyla karşılanacak. Kullanıcı alt ve üst 
limitleri girip Enter a bastığında ilk rastgele sayı üretilecek ve ekrana 
yazdırılacak. Kullanıcı belirlediği aralıkta başka rastgele sayı üretmek isterse
Enter, uygulamadan çıkmak isterse H tuşuna basacak.
Gelelim uygulamadaki en hassa noktaya. Kimlik denetimi için kullanıcı 
bilgilerinin girileceği nokta... Metod çağırılmadan hemen önce kullanıcı 
bilgileri tanımlanır ve metodu çağıracak nesneye yüklenir. Gelin koda bir 
bakalım. 
 
  DenetimliServis isim alanı web servisimizi temsil ediyor. Web 
servisimizin referansını eklediğimiz anda Visual Studio WSDL dokümanına bakarak 
iki sınıfı uygulamızda kullanabilmemiz için proxy olarak bizim için 
yapılandırdı: BasitAraclar ve AuthHeader. Basit araçlar rastgele 
sayıyı üreten metodu içinde barındıran sınıf. AuthHeader ise kimlik denetimi 
için gerekli bilgileri taşıyacak olan sınıf. Bu iki sınıf, metod çağırılmadan 
hemen önce bir yerde buluşmak zorunda. 
BasitAraclar sınıfının bir örneği olan arac nesnesinin 
SayiUret metodu çağırılmadan önce, aac nesnesine kimlik bilgileri yüklenmeli. 
Bunu gerçekleştirmek için, arac nesnesinin AuthHeaderValue propertisine kimlik 
bilgilerini yüklediğimiz header nesnesini yüklüyoruz. Böylece kimlik denetimli 
bir şekilde metodumuzu rahatlıkla çağırabiliriz. 
    | // Metodu çalıştıracak nesne...
 DenetimliServis.BasitAraclar arac=new 
        DenetimliServis.BasitAraclar();
 
 // Kimlik bilgilerini taşıyacak nesne
 DenetimliServis.AuthHeader header=new DenetimliServis.AuthHeader();
 
 //Kimlik bilgileri yükleniyor.
 header.Username="test";
 header.Password="test";
 
 //Güvenlik bilgileri metodu çalıştıracak 
        nesneye yükleniyor.
 arac.AuthHeaderValue=header;
 
 |  
 
  Bu makalede basit bir kimlik denetimini bir web servisi üzerinde 
  nasıl gerçekleştirebileceğimizi ve kimlik denetimi kullanan bir web servisini 
  nasıl kullanabileceğimizi gördük. Makalede geliştirilen web servisi ve onu kullanan 
  konsol uygulamalarının tam kodlarını buraya 
  tıklayarak indirebilirsiniz. 
    | int 
    sayi=arac.SayiUret(altLimit,ustLimit); |  
 
                Makale:SOAP Header Kullanarak Web Servislerine Kimlik Denetimi Eklemek XML ve Web Servisleri Kadir Çamoğlu
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |