JSON Web Token(JWT) Nedir?

Merhaba,

Bu içeriğimizde klasik oturum yönetimi araçlarından olan Session yahut Cookie yapılarına alternatif RFC 7519 standartı JSON Web Token(JWT) üzerine konuşuyor olacağız.

Günümüzde RESTFull API’lar da oturum işlemlerini eski usul Session yahut Cookie araçlarıyla değil JSON Web Token(JWT) ile gerçekleştirmekteyiz. Daha doğrusu JWT ile oturum işlemlerimizi icra etmeyi tercih etmekteyiz demem daha doğru olacaktır. “Peki hoca, Session ya da Coockie neyimize yetmedi?” şeklinde sorunuzu duyar gibiyim…

Evet… Bunca zamandır kullandığımız Session, Cookie vs. gibi yapılar ihtiyaçlarımıza yeterince cevap verebilme kabiliyetine sahiptiler. Ama günümüzde internet trafiğinin yoğunlaşması ve kullanıcı etkileşiminin artmasından dolayı eskiye nazaran misliyle oturum işlemleri gerçekleştirilmektedir. Dolayısıyla bu yoğunlukta bizlere performans ve maliyet açısından ve tüm bunların yanında hızlı işlevsellikte olan yapılar gerekmektedir. İşte bundan dolayı eski teknolojilere nazaran JWT yapısı geliştirilmiştir.

Mesela, oluşturulan her bir session için arkaplanda gerçekleştirilen IO işlemlerinin artan yoğunlukta performans açısından sunucuya ne kadar maliyetli olduğunu düşünün… Ya da aynı anda hem web hem de mobilde çalışan ve tek bir API üzerinden işlevsellik gösteren uygulamalarda session bazlı oturum bilgilerini platformlar arasında taşımaya yeltenince karşılaşılabilecek problemleri… İşte bu durumlara istinaden JWT’de hem IO işlemlerinden yalıtılmışlık söz konusuyken hem de platformlar arasında oturum transferi hiçbir probleme mahal vermeksizin sadece tokenı taşımakla sorunsuz gerçekleştiriliyor.

Token – Session Karşılaştırması

Session LoginToken Login
Client -> Siteyi aç.
Server -> SessionID ver.
Client -> UserName & Password gir ve SessionID ile yolla.
Server -> Bilgileri kontrol et. Doğru ise Session’a user bilgilerini set et. Yönlendirmeyi gerçekleştir.
Client -> Settings sayfasını iste. SessionID gönder.
Server -> SessionID için giriş yapmış kullanıcı var mı kontrol et. Cevap ver.
Client -> Siteyi aç.
Client -> UserName & Password yolla.
Server -> Bilgileri kontrol et. Doğru ise token oluştur ve Client’a yolla. Yönlendirmeyi gerçekleştir.
Client -> Settings sayfasını iste. Token gönder.
Server -> Token geçerli mi kontrol et. Cevap ver.

Tüm bunların yanında token yapılanmasının kendine has avantajlarıda mevcuttur;

  • Tokenlar cookie istemezler. Bundan dolayı mobil browserlar gibi cookie desteklemeyen platformlarda çalışabilirler.
  • Tokenler browsera özel değildir. Dolayısıyla, uygulamaya hangi platformdan login olunursa olunsun elde edilen token bir başka platformda rahatça kullanılabilir.

Token’ın Fiziksel Yapısı

Token, oturumla ilgili kritik bilgilerin şifrelendiği bir fotmattır. Yapısı aşağıdaki gibidir;

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Yukarıdaki token örneğine yapısal olarak dikkat edilirse eğer bir tokenın üç bölümden oluştuğu görülmektedir. Bu üç alanın ne olduğunu incelersek eğer;

HEADER
“Algoritma & Token Tipi”
PAYLOAD
“Veri”
{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
Başlıklar, kullanılacak algoritma ve token tipi belirlenmektedir. Oturum için taşınması gereken datalar barındırılmaktadır.(surname, password, id vs.)
Kritik bilgiler taşınabilir.
VERIFY SIGNATURE
“İmza”
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret
)
Tokenın imzasıdır. İki parametre mevcuttur.
1. Header ve Payload alanlarının BASE64 ile şifrelenmiş verileri.
2. Bizim tarafımızdan belirlenmiş olan gizli anahtar.

Tüm bu bilgilerin şifrelenerek harmanlanmış hali token yapısında bir veriyi ortaya çıkarmakta ve bizler sadece o veriyi kullanarak tüm işlemlerimizi gerçekleştirebilmekteyiz.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.