msHOWTO

22 Eylül 2016 Perşembe

Windows Form Application System Security Exception

Merhaba değerli okurlar,

Bu makalemde sizlere bir hafta öncesinde karşılaştığım bir sorunun senaryosunu ve çözümünü anlatacağım. Dilerim böyle bir senaryo ile karşılaştığınızda bu makaleye kolay ulaşmış ve sorunu hızlı bir şekilde çözmüş olursunuz.

Senaryomuz şu şekilde ;

Bir tane windows form uygulaması yazdınız ve bu uygulama gerek server makinada gerekse herhangi bir pc üzerinde kurulu çalışmaya hazır olsun. Fakat bu uygulamayı bir çok sağladığı avantajlardan dolayı bu pc/server üzerinden paylaşıma açıyorsunuz ve client pc ler paylaşımda olan exe yi kendi makinaları üzerinde kısayol olarak ayarlayıp çalıştırıyorlar. Buraya kadar herşey çok güzel. Ne var ki bunda çalıştıramazlar mı yani ? Elbette ki çalıştırabilirler. Fakat eğer bu uygulama üzerinde reflection kullanarak başka bir uygulamayı (gene kendi yazdığınız uygulamayı) ayağa kaldırmaya çalıştığınız zaman bizim karşılaştığımız hatayı "System security exception" alabilirsiniz. Böyle bir durumda iki farklı yoldan çözüme ulaşabilirsiniz.

Çözümler ise şu şekildedir ;

1-) AppDomain kavramını çok iyi anlamanız gerekiyor. Malesef bu makalede bu konuyu anlatmayacağım. Bir çok kaynaktan bu bilgiye rahatlıkla ulaşabilirsiniz. AppDomain'i iyi bir şekilde öğrendikten sonra  reflection kullanarak açtığını uygulamayı yeni bir appDomain oluşturup onun üzerinden açabilir ve o oluşturulan appDomain'e istediğiniz şekilde Permission'lar set edebilirsiniz. Bu yöntem biraz sancılı ve çok iyi bir şekilde tasarlanıp kodlanması gerekmektedir. Diğer yöntem daha kolay olduğu için ben aşağıda anlatacağım çözüm yoluna gittim.

2-) Bu senaryo da daha önceden çözüm olarak Yönetimsel Araçlar da bulunan .Net Configuration Tool u üzerinden Intranet,Computer ve diğer sekmelerde Full Trust yetkisi veriyorduk. Windows 10 üzerinde bu tool (.net 3.5 için) bulunmamaktadır. Bu yüzden tool kullanarak Full Trust veremedik. Yaptığım araştırmalar sonucunda Command Promt kullanarak da bu işlemi yapabildiğimizi öğrendim. Yapılması gerekenler sırasıyla şu şekildedir ;


  • Command Promt'u yönetici olarak çalıştırın ve aşağıdaki kodları sırasıyla yazıp çalıştırın.
  • cd %windows un kurulu olduğu disk adı %:\Windows\Microsoft.NET\Framework\v2.0.50727
  •  caspol.exe -m -ag 1 -url "file://\\%Belediyenet klasorunun bulunduğu serverın ip si%\BelediyeNet\*" FullTrust
  • Eğer windows 64 bit ise aşağıdaki kodları da çalıştırmanız gerekiyor
  • cd %windows un kurulu olduğu disk adı %:\Windows\Microsoft.NET\Framework64\v2.0.50727
  •  caspol.exe -m -ag 1 -url "file://\\%Belediyenet klasorunun bulunduğu serverın ip si%\BelediyeNet\*" FullTrust
Bu işlemlerden sonra uygulamayı yeniden çalıştırdığımızda sorun ortadan kalktı. Umarım sizin sorununuza da çözüm olur.

Bir sonraki makalede görüşmek dileğiyle.

22 Şubat 2016 Pazartesi

Central Authentication Service Entegrasyonu (CAS)


Central Authentication Service Entegrasyonu (CAS)
·         CAS Nedir ?
CAS Single Sign-On hizmetini sağlayan open source bir sistemdir.Birden fazla sistemi CAS ile entegre edip merkezi bir authentication sağlayabilirsiniz. Böylelikle n tane sistem tek bir yerden authentication işlemi yapar ve n tane sistemi tek bir kez authentication işleminden sonra kullanabilirsiniz.
·         CAS Mimarisi

Aşağıdaki Şekil 1 resminde de detaylı incelendiğinde CAS mimarisinin adımları aşağıdaki maddelerde anlatıldığı gibi olduğu görülebilir.
o   Uygulama Get olarak server dan user tarafından çağırılır,
o   Sunucu response olarak CAS ın bulunduğu linkin login sayfasını service parametresi ile birlikte çağırır. Bu service parametresinde kullanıcı CAS üzerinden login olduktan sonra CAS’ın gelen isteği hangi sayfaya yönlendireceğinin bilgisi olmalıdır,
o   Kullanıcının karşısına CAS login ekranı gelir ve kullanıcı login olur,
o   Login işleminden sonra CAS authentication işlemini yapar ,
o   Bir sonraki adım olarak service parametresi olarak verilen linke GET olarak sonuna ticket queryString ini ekleyerek yönlendirme yapar. Bu yonlendırmeden once yapılacak olan isteğin içerisine CASTGC cookie’sini ekler,
o   Daha sonra CAS’ın yönlendirme yaptığı sayfa içerisinde istek ile gelen ticket querystring i ile birlikte CAS’a Get olarak “casserverlink/serviceValidate?ticket=…&service=…”  istek yapılır ve CAS üzerinden gelen ticket bilgisinin validation işlemi yapılır.
o   Bu işlemden sonra CAS’dan xml olarak gelen kullanıcı bilgileri içerisindeki bilgiler alınır ve Cookie lere JSESSIONID olarak asp sessionID atılır,
o   Bu aşamadan sonra artık kullanıcının authentication işlemi tamamlanır.
o   Bir başka uygulamaya ilk erişiminde ise 5.aşamada cookie’ye atılan CASTGC bilgisi request’in cookie bilgisine eklenerek CAS uzerınde validate yapılır ve CAS yeni bir ticket üretir ve querystring ile bizim querystring olarak verdiğimiz service bilgisindeki linke yönlendirme yapar,
o   Yeni oluşan ticket bu şekilde alındıktan sonra 6. Aşama tekrarlanır,



Şekil 1


Asp.Net web form projelerinde CAS 2.0 entegrasyonu çok sıkıntılı bir süreçtir. Asp.Net web form uygulamalarında bulunan page life cycle nedeni ile kullanıcının ilk yaptığı istek CAS'a yapılan yönlendirmeden sonra kaybolmaktadır. Bu durum CAS'ın hazırladığı .Net Library kullanıldığında oluşur. Bu nedenle eğer Asp.Net web form uygulaması ile CAS entegrasyonu yapıyorsanız malesef yapamayacaksınız. İnternet üzerinde CASP.cs class'ına rahatlıkla erişip onun üzerinden işlemlerinizi yapabilirsiniz. Bu class içerisindeki Authenticate methodunu kullanarak authentication işlemini gerçekleştirebilirsiniz. Fakat CAS'ın resmi sitesindeki dökümanları incelediğinizde de göreceksiniz ki CAS tarafından oluşturulan ticket sadece 1 kez validate ettirilir. Bu nedenle bir kez validate işlemi yapıldıktan sonra asp.net uygulamnızda kullanıcı bilgilerini session üzerinde tutarsanız CAS üzerinden kullanıcı login ve validation işlemini yapmış olursunuz. Fakat Bu senaryoda ise kullanıcı CAS uzerınden logout olduğunda , sizin uygulama üzerinde kullanıcı bilgileri session da tutulduğu için single sign out olarak ayarlayamacaksınız. Malesef bu durumu göze almak zorundasınız. 

Uygulamanız üzerinden logout olunduğunda CAS üzerinde de logout olması için tek yapmanız aşağıdaki link'e redirect yapmanız yetecektir.

casserverlinki/logout 

Umarım faydalı olmuştur. Bir sonraki makalemizde görüşmek üzere.