Jwt

Anlam Ayrımı Bulunmuyor.

2020 yılında @freeman tarafından açılan bu başlık 1 entry ile zenginleşti ve 8 defa ziyaret edildi.

Fotoğraflar

Hepsini göster
4 dakikada okunabilir.

JWT, açılımı JSON Web Token olan, taraflar arası denormalize veri transferi ve bu verinin doğrulamasını içeren bir protokoldür. RFC 7519 ile standartları belirlenmiştir.

3 ana katmandan oluşur.

1. Header Katmanı


Bu alanda verinin şifreleme algoritmasının * adı gibi meta bilgiler bulunur. base64url ile kodlanır. Bu veri herkese açıktır.

2. Payload Katmanı


Bu alanda taşınacak veriler tutulur. Mesela oluşturma tarihi, geçerlilik süresi gibi bir takım genel konular için jwt bazı kısaltmaları standart hale getirmiştir. Genel uyumluluk için bunları kullanmak gerekir. Bunlar haricindeki bilgiler de yine json formatında olmak şartıyla bu alana eklenirler. Yine base64url ile kodlanır, dolayısıyla herkese açıktır.

3. Signature Katmanı


Bu alanda ilk iki alanın kodlanmış ve aralarına konulan bir nokta ile birleştirilmiş hali alınır ve güçlü bir kripto algoritması ve gizli, paylaşımsız bir şifre ile şifrelenir. Bu şifrelenmiş dizge yine base64url ile kodlanarak taşıması güvenli hale getirilir.

Son olarak bu üç katman sırayla alınır ve aralarına üç nokta yerleştirilerek yine birleştirilir. İşte bu veri geçerli bir json bazlı web token'ıdır.

İlk iki katman herkese açık olduğu için men in the middle türü saldırılarda güvenli değildir ama böyle bir saldırıda zaten hiç bir önemli veri güvende değildir. Dolayısıyla SSL şart. Bu sağlanırsa güvenlidir.

JWT bir login sürecinde oluşturuluyorsa kişi parola ve kullanıcı bilgilerini bir kereliğine gönderir ve sunucuda kontrolü yapılır. Eşleşme sağlanınca payload alanına kullanıcı ID'si veya sistemde bir kullanıcıya referans vermek için nesini kullanıyorsanız o bilgiyi ekleyebilirsiniz ve jetonu kullanıcıya teslim edersiniz. Sunucu üzerinde herhangi bir session bilgisi tutmazsınız. Bu nedenle jwt stateless yani durumsuzluk sağlar. Kendisi stateless değildir ama sunucuya bunu sağlar.

Artık bu jeton size kullanıcı tarafından her istekle birlikte gönderilmelidir. Kullanıcı size bu jetonu tekrar gönderdiğinde, herkese açık ilk iki katmanı alıp elimizdeki gizli şifre ile şifrelersek ve elde ettiğimiz şifrelenmiş veriyi jetondaki üçüncü grup ile eşleştirirsek gönderilen jetonun üzerinde oynanmadığını dolayısıyla herkese açık alanlarındaki bilgilere güvenebileceğimizden emin oluruz ve jetondaki kullanıcı bilgilerini kullanarak sanki kullanıcı oturum açmış, oturumdan kullanıcı bilgilerini almışız gibi yetki gerektiren alanlardaki işlemlere devam edilmesini sağlarız. Normalde bu kullanıcı bilgisini ister veritabanı ister session olsun disk üzerinden alıp getirmemiz gerekecekti. Bütün bunlara gerek kalmadı çünkü jwt bu bilgiyi üzerinde taşıyordu biz sadece bu bilgiyi doğruladık o kadar. Bu nedenle JWT performanslıdır diyebiliriz.

Elbette bazı dezavantajları da yok değil. Bu jetonlara geçerlilik süresi atayabiliyoruz demiştik, evet. Ama mesela kullanıcı birden fazla cihazdan giriş yapmışsa ve bazı cihazlardan açtığı oturumu kapatmak istiyorsa yani o cihazlara gönderilen jwt'lerin geçersiz kılınması gerekiyorsa, bunu yapamayacaktır. Çünkü jwt'lerin mantığı herhangi bir disk veya veritabanı işlemi gerektirmeden hızlıca yetki kontrolü sağlamak. Her jwt kendi doğrulamasını ve veritabanını kendi üzerinde taşır. Dolayısıyla uzaktan müdahale edilmemelidir. Bir takım veritabanı işlemleri ve standardın dışına birazcık çıkılarak bu işlem elbette gerçekleştirilebilir ama veritabanına bağlandıktan sonra jwt kullanmanın tüm avantajını kaybetmiş oluruz.

#programlama #web #json #api