|
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.
[WebMethod]
public int SayiUret(int altLimit, int ustLimit)
{
Random rastgele=new Random();
return rastgele.Next(altLimit, ustLimit);
}
|
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.
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.
using System.Web.Services.Protocols; |
İkinci adım, AuthHeader adında SoapHeader classından miras
alma yoluyla türetilmiş yeni bir sınıf oluşturalım.
// Kimlik denetimi için kullanılacak sınıf.
public class AuthHeader : SoapHeader
{
public string Username;
public string Password;
}
|
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.
Üçü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.
public AuthHeader KimlikDenetimi; |
Dördüncü adım, kimlik denetimi yapmak istediğimiz servise bir attribute
eklemek.
[SoapHeader("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.
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;
|
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.
<?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.
// 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;
|
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.
int
sayi=arac.SayiUret(altLimit,ustLimit); |
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.
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
|
|