Makale Özeti

Bu makalemde WSE 3.0'ın seçeneklerinden biri olan Username ile bir web service'in güvenliğinin nasıl sağlanacağını göreceğiz.

Makale

Web Service Security 3.0 With User Name

                Merhabalar.Güvenlik konusu artık günümüzde her zamankinden daha fazla önem kazanmıştır.Bildiğiniz gibi web serviceler projelerimize oldukça kolay eklenebilmektedir.Dolayısıyla web service’lerle veri alışverişi sırasındaki güvenlik ayrıca bir önem kazanmaktadır. Günümüze kadar web service’lerin güvenlikleri çeşitli yöntemler ile sağlanıyordu. Bunlardan biri olan Soap Header yöntemi artık yeterince güvenli değil. WSE3.0 ise son çıkan güvenlik önlemlerinden biridir. WSE 3.0 dan önce de WSE 2.0 ile güvenlik sağlanabilmekteydi ancak WSE 3.0 bize daha üst düzey bir güvenlik sağlamaktadır.

                WSE 3.0 ‘ı kullanabilmek için öncelikle WSE 3.0 kurulumunu indirmelisiniz. Buraya tıklayarak indirebilirsiniz. http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en .Kurulumu bitirdikten sonra WSE 2.0 kurulumu ile gelen iki farklı test sertifikalarını da bilgisayarınıza tanıtmanız gerekmektedir. Siz de WSE 2.0 kurulumu ile gelen ReadMe dosyasından yararlanarak sertifikaların tanıtımlarını gerçekleştirebilirsiniz.

                WSE 3.0 içinde 4 faklı güvenlik seçeneği bulunmaktadır. Bu makalemizde WSE 3.0 ile User Name seçeneği ile nasıl bir güvenlik sağlanacağını göreceğiz.

                Öncelikle Başlat àProgramlaràWSE 3.0 àConfigurationTools çalıştırın. Burda resimde göründüğü gibi ilk sayfa da açılan 2 seçenekte işaretlenir.

Policy tabında bulunan Enable Policy işaretlenir.


Add diyerek yeni bir Policy file oluşturulur. Add dediğimiz zaman Policy ismini bizden isteyecektir. “Server” yazarak Ok dediğimiz zaman karşımıza WSE Security Settings Wizard çıkacaktır.Next diyerek burdaki ayarları yapalım.

Önceklikle web service güvenliği ayarlanacağı için “Secure a service application” seçilir. Alt tarafta ise “Username” seçeneği işaretlenir. Diğer yazılarımızda diğer Authentication seçeneklerini inceleyeceğiz.
User and Roles seçeneğinde hiçbir değişiklik yapılmadan bir sonraki adıma geçilir.

Message Protection seçeneğinde ise alt tarafta bulunan “Secure Session” özelliği seçilmeden devam edilir. Bir sonraki adımda ise bilgisyarınıza tanıtmış olduğunuz X.509 sertifikalarından server olanını seçeceğiz. Select Certificate dediğimiz zaman karşımıza

çıkacaktır. Burdan setfikamızı seçerek security wizard Finish diyerek sonlandırılır.
Karşımıza ilk çıkan ekrana geri dönmüş oluruz. File àSave As.. diyerek app.config dosyası olarak kaydettiğimiz zaman bu dosyanın hemen yanına “wse3policyCache.config” dosyasını yaratacaktır.

                Bu iki config dosyasını web service uygulamamızda Solution Explorer’a ekleyelim.

Web service’in kod kısmında ise;

using
System;

using System.Data;

using System.Web;

using System.Collections;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.ComponentModel;

using Microsoft.Web.Services3;

using Microsoft.Web.Services3.Security.Tokens;

 

namespace WebService1

{

    /// <summary>

    /// Summary description for Service1

    /// </summary>

    [WebService(Namespace = "http://tempuri.org/")]

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [ToolboxItem(false)]

    [Policy("Server")]

    public class Service1 : System.Web.Services.WebService

    {

 

        [WebMethod]

        public string HelloWorld()

        {

            string ad = "boş";

if                 (RequestSoapContext.Current.Credentials.UltimateReceiver.GetCli entToken<UsernameToken>().Label == "Admin")

            {

                ad = RequestSoapContext.Current.Credentials.UltimateReceiver.GetClientToken<UsernameToken>().Username.ToString();

            }

            return ad;

        }

    }

}

Wse3policyCache.config dosyasını oluştururken verilen isim yukarıda işretlendiği gibi Policy(“..”) kısmına yazılır. Bunların haricinde oluşturduğumuz web service’e istenilen kullanıcıların girebilmesini sağlayan WSE 3.0 ın kendi UsernameTokenManager.cs yerine bu class’a override eden kendi class’ımızı ekleyip WSE 3.0’ın bu class’ı kullanmasını sağlamak kaldı. Bu class’ı WSE 3.0 kurduğunuz zaman bakabileceğiniz sample lar içinde de bulabilirsiniz.

                Sıra geldi client uygulamamızı oluşturmaya. Bir windows application yaratalım ve oluşturduğumuz web service’i Web Referances olarak ekleyeklim. Daha sonra yukarıda yaptığımız gibi Configuration Tool ‘u tekrar açalım. Burda yaptığımız bazı farklılıklar olacaktır.


Buraya kadar herşey aynı olarak devam etti. Add diyerek Policy ismimizi belirleyeceğiz. “Client” olarak yazalım.Ok dediğimiz zaman tekrar “WSE Security Settings Wizard” açılıcaktır.

Burada client application’ın güvenlik ayarlarını yaptığımız için Secure a client application seçilir. Authentication için Userrname kullanılıcağından dolayı Username seçiyoruz.
        Bir sonraki ekran olan Username Password kısmında herhangi bir değişiklik yapmadan geçiyoruz.

Burda yine “Establish Secure Session” seçeneğini kaldırarak devam ediyoruz.

Certificate seçiminde ise Select Certificate diyerek tanımladığımız sertifikalardan client olanı seçilir.

Daha önce yaptığımız gibi yine FileàSave As diyerek app.config dosyası olarak kaydedelim ve bu dosyanın yanında yaratmış olduğu wse3policyCache.config dosyalarını windows uygulamamız içerisine ekleyelim. Bir button ekleyelim ve onun click event’ına

localhost.Service1Wse service = new WindowsApplication1.localhost.Service1Wse();

 

UsernameToken token = new UsernameToken("ali", "49",PasswordOption.SendPlainText);

 

service.SetPolicy("Client");

 

service.SetClientCredential<UsernameToken>(token);

 

MessageBox.Show(service.HelloWorld());

Kodumuzu ekleyelim. Burda Username token oluşturulurken isim ve şifre verilmektedir. Peki bu şifre ve ismi nerde kontrol edeceğiz.

Yukarıda anlattığım UsernameTokenManager.cs içerisinde
protected override string AuthenticateToken(UsernameToken token)

     {

         bool valid = ValidateUser(token.Username, token.Password);

         if (!valid)

         {

             throw new ApplicationException("Invalid user");

         }

         token.Label = "Admin";

         return token.Password;

     }

     private bool ValidateUser(string UserName, string Password)

     {

         bool geri = false;

         if (UserName == "ali" && Password == "49")

             geri = true;

         return geri;

     }

bu şekilde bir kontrol yaptırarak kişileri kontrol ettirebiliyoruz. Burada kullanıcı isimlerinin ve şifrelerini bir veritabanından veya Active Directory’den sorgulatarak doğru olup olmadığını ve haklarını belirleyebiliriz.

                Burada web service ve windows application arasındaki veri alışverişlerinde bilgisayarınıza eklemiş olduğunuz sertifikalar kullanılmakta ve bu sertifikalar ile şifrelenip gönderilip alınmaktadır. Bu şifreleme sertifikanın özelliklerine göre de değişmektedir.

Örnek Uygulama

Örnek Sertifikalar