Web servislerinde, güvenliğin sağlanması noktasında, güvenlik bilgilerinin SOAP header’ları içerisinde gönderilmesini öngören “Custom Authentication” tekniği uygulanabilir. ASP .NET web uygulamalarından aşina olduğumuz, konvansiyonel tekniklerin (Forms Authentication, IIS Authentication, Passport Authentication) yanı sıra uygulanması -programatik anlamda- daha kolay olan bu tekniğe başvurulabilir.

İpucu : Web servislerine ilişkin temel güvenlik kavramları ve terminoloji hakkında daha fazla bilgi edinmek için Yeliz KORKMAZ’ın “Web Servislerinde Güvenlik” başlıklı makalesini okuyabilirsiniz.

Custom Authentication tekniğinin uygulanabilmesi için web.config dosyasında ki mode niteliğine None değeri atanmalıdır.

<authentication mode=”None” />

Soap header’ını programatik olarak temsil edecek sınıf, karakteristik özelliklerini System.Web.Services.Protocols namespace’i içerisindeki SoapHeader isimli soyut taban sınıftan kalıtım yolu ile almalıdır. Bu noktada yapılması geren; kullanıcı ismi, şifre gibi bilgileri; public veri elemanlarında taşıyacak ve SoapHeader sınıfından inherit edilmiş bir sınıf bildirimi yapmaktır.

public class CAuthentication : SoapHeader
{
public string Username;
public string Password;
}

Web servisine ilişkin sınıfta ise, söz konusu sınıfın türünde bir public veri elemanı (değişken) tanımlanmalı ve bu değişken ismi, -çağrımı- güvenlik altına alınmak istenen RPC fonksiyonlara, [SoapHeader()] niteliğinin ilk parametresi olarak geçilmelidir.

public CAuthentication sec;

[WebMethod]
[SoapHeader("sec", Direction=SoapHeaderDirection.In)]
public void GetReport()

{
// …
}

[SoapHeader()] niteliğinin ikinci parametresi ise; soap header’larının yönelimini belirlemektedir. Bu parametreye, SoapHeaderDirection enum’ının sayımladığı sabit değerleri geçilebilir.

Sabit Anlamı
In Header client’tan server’a gönderilebilir.
InOut Header hem client’tan server’a hem de server’dan client’a gönderilebilir.
Out Header server’dan client’a gönderilebilir.
Fault Header client’a sadece web servisindeki metodun bir exception üretmesi halinde gönderilebilir.

Örnek : Aşağıdaki örneğin web servisi tarafında Authenticate() isimli bir fonksiyon yazılmış ve yukarıda anlatılan teknik kullanılarak, sadece ismi; “aykut”, şifresi “UBoat571″ olan kullanıcının söz konusu fonksiyonu çağırabilmesi istenmiştir.

using System.Web.Services.Protocols;

namespace Secure_Service
{
public class CAuthentication : SoapHeader
{
public string Username;
public string Password;
}

public class Service1 : System.Web.Services.WebService
{
// ….

public CAuthentication sec;

[WebMethod]
[SoapHeader("sec", Direction=SoapHeaderDirection.In)]
public bool Authenticate()
{
if (sec == null)
{
throw new Exception(”Eksik guvenlik bilgileri !”);
}

if ((sec.Username == “aykut”) & (sec.Password == “UBoat571″))
return true;

else
return false;
}
}
}

Web Servisini Kullanan Client Uygulama

Client uygulamada ise, proxy üzerinden kullanılan web servisine CAuthentication sınıfı türünde yaratılmış aut nesnesi üzerinden güvenlik bilgilerinin gönderilişi örneklenmektedir. Bu noktada proxy tarafından oluşturulan XxxValue isimli değişkene, güvenlik bilgilerini taşıyan nesne atanmalıdır.

localhost.Service1 srv = new ws_Secure.localhost.Service1();

localhost.CAuthentication aut = new ws_Secure.localhost.CAuthentication();
aut.Username = “aykut”;
aut.Password = “UBoat571″;

srv.CAuthenticationValue = aut;

try
{
if (srv.Authenticate())
Response.Write(”Authentication gerçekleşti”);
else
Response.Write(”Authentication gerçekleşmedi !”);
}
catch (Exception exc)
{
Response.Write(”Güvenlik bilgileri gönderilemedi !”);
}

Favorilerinize Ekleyin.
  • BlinkList
  • del.icio.us
  • Digg
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • blogmarks
  • Furl
  • Netscape
  • NewsVine
  • Reddit
  • Shadows
  • Technorati
  • YahooMyWeb
  • Fark
  • feedmelinks
  • Fleck
  • kick.ie
  • LinkaGoGo
  • Linkter
  • MyShare
  • Spurl
  • Webride