evrend yazdıZaten kullanıcı adı ve şifre ile uygulamaya girdiğinde token üreteceğim. Bu noktada hem fikiriz ama o token veritabanına gittiğinde, token var mı? aktif mi? Varsa hangi kullanıcıya ait, ait olan kullanıcı ile klasik Authentication olayını başlat gibi işlemler sisteme çok yük getiriyor. Ve bu yük minicik bir istek için bile böyle yürümek zorunda mı? Asıl soru bu?
Ama belki tokenlar cache'de tutularak oradan kontrol edilirse sistem daha mantıklı hale gelebilir. Ya da herhangi bir mantık ile kontrol işlemleri cache'e taşınırsa. Bunun üzerine yoğunlaşmam lazım biraz.
Merhaba,
Oauth2 buyuk bir framework, bir cok buyuk firma tarafindan da basariyla kullanilmis, ama ozellikle Tamamen API sunucusu olan(web isteklerinin yaninda uygulamam api isteklerine de cevap versin seklinde degilde, full API sunucu anlaminda) sistemler icin daha idealdir. Hatta bir yonuyle, cloud based yada merkezi bir yetkilendirme sistemi/cozumu kullanmiyorsaniz(Active directory, SSO, Idendity Server vs.) defakto standart haline gelmistir diyebiliriz.
Oauth 2 nin en onemli baslangic noktasi, Oauth sadece istemci / sunucu arasi yetkilendirme surecini kapsamamasi daha buyuk ve yetenekli olmasi, ve ozellik le , ayni API nin farkli yetki ve etki alanindaki istemcileri yonetecek sekilde kullanilmasi icin guclu bir alt yapi sunuyor olmasi diyebiliriz. Burada, farkli yetki ve etkiye sahip istemci kavrami ni soyle dusunebiliriz;
Uygulamanizin, ucretli surumunu kullanan istemciler, ucretsiz surumunu kullananlar, ucretli kullanimlar icinde farkli/yada daha fazla kaynaga erisimi olanlar, uygulamanizi kullanacak diger yazilimlarin yetkilendirilmesi (mobil istemciler le web uzerinden gelen istemciler ayni hak ve yetkilere mi sahip olacak vs.) Kisacasi Oauth buyuk bir yapi. hem istemcilerin, hem sisteminiz icindeki diger alt yapilarin bir biriyle nasil authenticate olacagindan, grouplara, kaynak paylasimdan yetkilendirmeye vs bir cok konuya cozum sunan bir alt yapi.
Daha bir cok sey daha sayabiliriz, Oauth 2 buyuk bir yapi, dogru kullanilmamasi hem guvenlik acisindan hem de performans acisindan sorunlari beraberinde getirecektir.
JWT ise bir standart, sunucun cok daha sade ve kolay bir sekilde, istemciye "sunucu tarafindan gizli bir anahtarla imzlanan ve JSON olarak decode/encode edilen" bir bilgiyi yetkilendirme sureci icin atamasindan ibaret. JWT (JSON web tokens) her yonuyle daha hizlidir, daha basitir,
1- Istemci login olur, kullaniciyla ilgili gerek duydugunuz(bir sonraki istek de bakmak isteyeceginiz) bilgileri, (kullanici ismi, id,role vs.) json olarak token e eklersiniz.
2- Ihtiyaciniz olan hersey token de oldugu icin tekrar tekrar kullanici yi bulmak icin sunucu da extra DB querylerine gerek yoktur, sadece tokenin encode ve decode islemini yaparsiniz.(JSON oldugu icin cok hizlidir)
3-Olceklenebilirlik adina kopya sunucularinizin hepsi, anahtari tasiyabilecegi icin, gelen istekleri istediginiz sunucunuza gonderebilirsiniz
Oauth 2 icinde de, cogu zaman ayriyeten JWT yi bir sekilde kullanmak zorunda kalirsiniz(teknik olarak zorunlu olmasada, performans ve kolaylik vs. icin), Oauth 2 deki refresh token mantigiyla JWT yi uygularsiniz , Oauth ile istemci yetkilendirilir ve ayriyeten bir token daha saglanir ve genelde, Redis benzeri bir yapiyla merkezi bir Lookup tablosu nu tokenler icinde tutarsiniz vs.
Kisacasi eger Oauth a ihtiyaciniz yoksa, yani sadece uygulamanizi mobil istemcilere komplex bir yapi olmadan acacaksaniz, JWT ideal secim olacaktir.
HTTPS kullanmiyorsaniz, sadece biraz daha fazla guvenlik icin, tokeni olustururken fazla hassas bilgileri tokene eklemeyin ve JSON Web Tokenlerinizi, JWE gibi bir yardimciyla bir kez daha encrytp edin(eger hassas bilgieri de eklemek isterseniz).
Bir de JWT ile ilgili tokeni gecersiz kilmak adina yapabileceginiz tek sey, expired olmasini saglamaktir, bu yuzden, expiration suresini biraz daha kisa tutmak isleminizi kolaylastiracaktir. Genelde Mobil uygulamada, ornegin 10 dakikada bir token expired oldumu diye kucuk bir kontrol yapilir , suresi dolduysa mobil istemci tokenini yeniler(10 dk sart degil uygulamaniz ihtiyacina gore belirleyebilirsiniz.)
jwt-auth paketi gibi bir paket isinizi gorecektir .
Biraz hizli yazdim ama insallah faydali olmustur.
Kolay gelsin.