JWT Token

JWT yani Json Web Token, sistemler arasında kimlik doğrulaması için kullanılan bir tekniktir. Kısaca örneklemek gerekirse server’dan servis ettiğiniz API olduğunu, mobil app ve web sitesi tarafından bu API kullanıldığını düşünün. Sisteme giriş yapan kullanıcıyı doğruladıktan sonra her istekte server tarafında kimlik doğrulaması yapmanız gerekecek. İşte JWT tam olarak burada devreye giriyor. Giriş yapan kullanıcıya bir token veriyorsunuz. Client sonraki tüm istekleri bu token ile birlikte yapıyor. Eskiden bu iş için session kullanıyorduk. Şimdi ise client’ların kullanıldığı platformlar çoğaldığı için üretilen verileri json olarak sunarak her platforma uyumlu şekilde çıktı veriyoruz. Dolayısı ile kimlik doğrulama sisteminin de güncel bir hal alması gerekiyordu ki tüm client’lar tarafından kullanılabilsin.

Çalışma mantığı

JWT birbirine nokta (.) ile bağlanan 3 kısımdan oluşur:

Başlık . Veri . İmza
header = '{"alg":"HS256","typ":"JWT"}'
payload = '{"user":"admin","iat":1422779638}'
key           = 'secretkey'
unsignedToken = encodeBase64Url(header) + '.' + encodeBase64Url(payload)
signature     = HMAC-SHA256(key, unsignedToken)

JWT‘nin payload kısmında doğrulama amacıyla kullanılabilecek, önerilen standart etiketler bulunmaktadır. (önerilir)

etiketisimaçıklama
issVerici (“issuer”)JWT’yi oluşturan/veren kuruluşun adı.
subAlıcı (“subject”)JWT’nin alıcısını belirten eşsiz değer.
audHedef kitle (“audience”)JWT’yi yürütecek tarafı belirten değer. Eğer değer yürütmeciyle eşleşmiyorsa JWT reddedilir.
expBitiş zamanı (“expiration”)JWT’nin hangi süreye kadar geçerli olduğunu belirten değer. Sayısal formatta olmalıdır.[3]
nbfÖncesi olamaz (“not before”)JWT’nin hangi süreden önce geçerli olamayacağını belirtir. Sayısal formatta olmalıdır.
iatOluşturulma zamanı (“issued at”)Anahtarın oluşturulma zamanını içeren bilgiyi taşır. Sayısal formatta olmalıdır.
jtiJWT IDBüyük/küçük harfe duyarlı, JWT’yi tanımlayan eşsiz anahtar kodu.

Size tavsiyem bu işlem için firebase/php-jwt gibi libraries kullanmanız. Jwt‘yi kendiniz oluşturmak için uğraşmayın.

Peki nasıl kullanılır ? sorusunu cevabına gelecek olursak. Temelde 3 farklı kullanış şekli vardır.

1. Banckend servisleri arasında

Eğer birbiri ile iletişim kuracak iki servis’te backend yazılımı ise user login işlemleri ile uğraşmaya gerek yok demektir. En mantıklısı her iki tarafa da aynı secret key‘i tanımlayarak işlem yapmaktır. İsteği atan tarafta tek kullanımlık token üretilir, isteği alan tarafta da aynı key olduğundan jwt‘yi kendisi üretmiş gibi çözer ve işler.

2. Normal Token (önerilmez)

Örneğin 15dk’lık tek token üretir ve login olan user’a verirsiniz. User tüm işlemlerinde bu token’ı kullanır, 15dk sonra otomatikman logout olmuş olur. İşlem yapabilmesi için tekrar giriş yapması gerekir.

3. Refresh Token (önerilir)

Login işleminde iki tane token üretilir. Bunlardan birisi yukarıdaki Normal token‘dır. İkincisi ise Refresh token‘dır. Client işlemlerde Normal token’ı kullanır. Normal token’in süresi bitince Refresh token’ı kullanarak yeni bir normal token alır. Dolayısı ile sistemden logout olmadan devam edebilir. User, client tarafında belirlenen süre içerisinde hiç işlem yapmazsa, client Refresh token’ı kullanmaz ve User’ı otomatikman logout etmiş olur.

Jwt token kullanımı kısaca bu şekilde oluyor 🙂
kullanımı ile ilgili örnekler için ayrı yazılar gelecek 🙂

Yorum Ekle

E-posta hesabınız yayımlanmayacak.

Gerçek kişi doğrulaması
43 − = 39