EN
ArgeLab.net
 VS.net 08
WCF'de kullanıcı adı ve şifre ile yetkilendirme

Son güncelleme 31 Mart 2008 Pazartesi

Eski adı 'Indigo' olan 'Windows Communication Foundation' (WCF); .net 3.0 ile beraber gelen, SOA (Service Oriented Architecture) yaklaşımına uygun geliştirilmiş, programların birbiriyle iletişimini sağlayan bir arayüzdür.

WCF .Net 2.0'da SOAP iletişimi için kullandığımız web servislerini, yüksek performanslı binary erişim için kullandığımız remoting'i, 'distributed transaction' ve 'message queue' teknolojilerini birleştirerek tek çatı altında toplayan bir teknolojidir.

WCF servislerinde Client'lar ve servisler birbirlerine 'endpoint' adı verilen erişim noktalarıyle (soket gibi düşünülebilir) bağlanır. Her endpoint'de servis fonksiyonlarının tanımının yer aldığı bir 'Service Contract' belirlenmiştir. Endpoint'lerde aynı zamanda Servis ile clientın nasıl iletişim kuracağının belirlendiği bir de Binding tanımı vardır.

Bu makalede IIS'den host edilen bir WCF servisini kullanıcı adı/şifre yetkilendirmesiyle nasıl kullanacağımızı göreceğiz. Bu yetkilendirme tipinde WCF mesajlarıyla birlikte kullanıcı adı/şifre de açık olarak gittiğinden sertifika kullanarak mesajları yada tüm iletişimi kriptolamamız gerekmektedir. Aksi taktirde basit bir 'network sniffer' (ağ dinleme) yazılımı ile dışarıdan kolayca ele geçirilebilir.

Bu işlem için önce yazılımı geliştirirken kullanacağımız bir test sertifikası oluşturmamız gerekiyor. Development için sertifikayı Microsoft'un 'makecert' yada 'selfssl' araçlarıyla oluşturabilirsiniz.

WCF servisini IIS üzerinde host edecekseniz, oluşturduğu sertifikayı siteye de kurduğu için selfssl bu iş için daha uygundur. SelfSSL yazılımı microsoftun 'IIS 6.0 Resource Kit Tools' araçlarıyla gelir, tabi XP'de de (IIS 5.1) çalışır.

Sertifika oluşturmak için kullanacağınız komut satırı, şuna benzer:

/v parametresi gün sayısı, /T parametresi root sertifikası elde etmek için kullanılır.

Eğer selfssl yerine makecert kullacak olsaydık, komut satırımız şuna benzeyecekti:

Tabi windows server 2003/2008 üzerinde 'default web site' dışında kendi açtığınız bir siteye host edecekseniz, önce oluşturduğunuz sitenin metabase id'sini öğrenmeniz gerekiyor. Bunu 'inetmgr' yada 'IIS resource kit' ile beraber gelen 'metabase explorer' yazılım ile yapabilirsiniz. Bu durumda site id'sini selfssl'de "/s" parametresiyle verebilirsiniz:

Sonraki adımda oluşturduğumuz sertifika için asp.net process'ini çalıştıran kullanıcıya okuma yetkisi vermemiz gerekiyor. Bu kullanıcı windows xp ve 2000 için varsayılan olarak 'aspnet' kullanıcısı, windows 2003 server içinse 'network service' isimli kullanıcıdır. Bu işlem için de yine Microsoft'un 'winhttpcertcfg' aracını kullanıyoruz.

Kullanımı şuna benzer (XP/2K için):

yada 2003 server için:

Sertifikanın hem WCF'in host edildiği sunucuda hem de client'da olması gerekiyor. Bu nedenele selfssl ile oluşturduğunuz sertifikayı export etmeniz gerekebilir, bu işlem için 'mmc' aracına ekleyeceğiniz certificates snapin'ini kullanabilirisiniz. Sertifikayı clienta kurarken 'trusted root certificate authorities' de 'Local Store' içerisine atmalısınız.

WCF servisin web.config'inde servisin güvenlik modu mesaja, güvenlik tipi de UserName olarak tanımlanmalı:

Sonrasında servisin güvenlik ayrıntıları Behavior tanımı altında şu şekilde verilir:

Örnekte görüldüğü gibi message security kullanıyoruz, transport security kullansak konfigürasyonumuz şuna benzeyecekti:

ve

Transport secuirty'de SSL port ayarlarını yaparak (siteye ssl port ataması yapıp portu dışa açmak gibi) servise https ile erişmeniz gerekmekte. IIS'de host edilen WCF servislerinde transport security kullanırken uygulamamızın IIS security ayarlarını Basic Authentication'e çevirmemiz gerektiğinden, kullanıcı adı şifre kontrolünde önce IIS'in devreye girerek bunun bir windows/active directory kullanıcısı olup olmadığına bakması (yani window kullanıcısı olmayan custom user/pass oluşturamama) gibi bir problem olduğundan, message security'i öneririm. Message security'de uygulamamızın IIS security ayarlarından sadece Anonymous'u seçiyoruz.

Kullanıcı adı şifre kontrolü için de şuna benzer bir sınıf yazmamız gerekiyor:

Servise erişecek client uygulamanın web.config yada app.config ayarları ise şunun gibi olmalı:

ve

Client servis erişiminde kullanıcı adı/şifreyi şu şekilde geçer:

 argelab_wcfde_kullanici_adi_ve_sifre_ile_yetkilendirme.zip (55K)

ArgeLab.net, bu sitenin eksiksiz ve hatasız olduğu
konusunda bir garanti veremez. Bu sitede yer alan bilgilerin ve
programların kullanımı sonucu oluşabilecek zararlardan
sorumlu tutulamaz.


   © Copyright 2006-2008 Serdar Irmak