J_Security

Merhaba arkadaslar, bu yazımda contaıner base nasıl auth olunur ona deginecegim.

J_Security_Check

Java Web Applicationlar içerisinde login/auth vs gibi konuları rahatlıkla gerçekleştirebiliyoruz. Blog’daki Restful yazılarından birinde bu konuya deginmistim.

Gereken durumlarda ilgili kaynağımız için auth’a yani kimlik dogrulamaya ihtiyac duyarız hatta authanticationun yanında yetki dogrulama olan autharization’a da ihtiyaç duyabilmekteyiz. Bunun için deployment descriptor dosyamız olan web.xml içerisinde belirli tanımlamalar yapmamız gerekmektedir. Örnek bir konfigürasyona göz atalım;

Web.xml dosyamızda tüm jsp sayfalarımıza gelen GET ve POST istekleri için bir secure resource tanımı yaptık. Burada dikkat edileek noktalar;

  • Secure olacak resource tanımını security-constraint içerisinde yer alan web-resource-collection içerisinde yapmamız gerekmektedir.
  • Url pattern ile hangi kaynaklara erişimin kimlik dogrulamaya ihtiyac duydugunu belirtmeliyiz. Tek url pattern ile yetinmeyebilirsiniz örnegin *.jsp’e ek url-pattern tag’i ile /rest gibi bir örnek yaparak rest kaynagınızı da secure yapabilirsiniz.
  • Http methodlarını ayarlayabilirsiniz, default olarak GET’dir.
  • Secure olan kaynaga hangi role sahip kullanıcıların login olabilecegini belirtmeliyiz.
  • login-config ile kimlik dogrulamanın nasıl yapılacagini belirtiriz. Burada auth-method ile basic authantication yapacagımızı belirttik. Birazdan ona deginecegim.
  • security-role tanımı yaparak bu role sahip kullanıcıların login olabilecegini belirttik.

Başka herhangi bir şey yapmadan deploy edelim ve herhangi bir jsp sayfasına gidelim;

Screenshot from 2016-03-03 19:37:32

İlgili secure kaynaga erismek istedigimizde araya j_security_check girecektir ve içinde bulunan contaıner’a girilen username ve password bilgilerini sorar. Eger dogru ise ilgili kaynaga yönlendirme yapar. Basic authantication ile uygulama çalıştıgında ilgili kaynak açılmadan önce pop-up ile bilgi istenir.

Login methodları şunlardır;

  • BASIC : Yukarıdaki gibidir. Username ve password Base64 ile encode edilir. Pek güvenli degildir çünkü bilgiler encode edilir encrpt edilmez!
  • DIGEST : BASIC ile tek farkı girilen bilgiler encrpt edilir.
  • CLIENT-CERT : HTTPS olarak authantication yapılır. Bunun için PKC gerekli olacaktır.
  • FORM : Custom olarak login page yapılıp j_security_check’in manuel olarak tetiklenmesidir.

Peki kaynagımızı secure hale getirdik de buna hangi userlar girecek, hangi rollere sahip olacaklar bunu nasıl ayarlayacagız ona baklaım;

Şuan tomcatte çalıştıgımız için tomcat authanticationları tomcat-user.xml ile gerçekleştirir, Realm ile de yapılabilir ama konumuz o degil suan. Bunun için şu tanımları tomcat’in conf dizini altındaki dosyada yapalım;

tomcat-user.xml

ilk olarak iki adet role tanımı yaptık. Bunlar; adminRole ve superAdminRole.

Bu rollere sahip olan alican kullanıcısı bulunmakta, password ise akkus. Giris yapalım;

Screenshot from 2016-03-03 19:51:10

index.jsp sayfamız ise kısa ama yer verelim;

Form based olarak authantication’a bakalım;

Bunun için web.xml dosyamızda şu değişiklikleri yapalım;

Dikkat edilecek nokta auth-method olarak FORM ve login sayfamızı vermemizdir. Login fail oldugunda error sayfasına yönlendirilebilir, ben aynı sayfaya yönlendiriyorum.

login.jsp

Jsp sayfamızda dikkat edilmesi gereken nokta form tanımı yaptıgımız kısımdır;

method param olarak POST vermeliyiz, GET’de verilebilir ama güvenli degildir. Önemli olan nokta ise action kısmıdır. Authantication olarak j_security_check’e gidip sormasını istiyoruz.

Ek olarak form input’larına parametre olarak j_security_check’in parametrelerini vermemiz gerekmekte.

  • Username input’u için name alanına “j_username”:
  • Password için ise name alanına “j_password” yazmamız gerekmektedir:

Kod içerisinde j_security_check’i tetiklemek için ise bir url oluşturup tarayıcıyı oraya yönlendirmeniz gerekmtektedir, şöyle ki;

 

Screenshot from 2016-03-03 19:56:54

Yanlis girelim sifreyi ve tekrar aynı sayfayya err parametresi ile döndüğünü görelim;

Screenshot from 2016-03-03 20:03:17

 

NOT : Authantication olurken contaıner’a sordugunuzdan dolayı sizin icin uygulamanın hangi contaıner da çalıştığının bir önemi yoktur. Örneğin tomcat userları tomcat-user.xml’de tutarken farklı web server yada application servler’lar kendilerine özel bir yerde user’larını tutarlar. Sonuçta siz XXX kullanıcısı var mı yok mu onu sorarsınız. Örneğin aynu uygulamayı WAS’a aynı şekilde deploy edebilirsiniz. WAS, kende içerisinde file registery yada ldap registery gibi farklı şekillerde user’ları tutar, bir seçenek olarak file olarak kullanabilirsiniz. Diğer tüm contaıner’lar için bu geçerlidir.

Yazımı burada sonlandırıyorum arkadaslar. İlgili projeye şurada erişebilirsiniz : TomcatAuth

Mutlu ve sağlıcakla kalın.

~ A.Akkus

 

 

623 Total Views 1 Views Today