JWT(JSON Web Tokens)

Tuba Nur Yeşiltaş
folksdev
Published in
3 min readOct 26, 2022

Web projelerini geliştirirken uygulamayı korumak ve yalnızca yetkili kullanıcıların uygulamaya erişimini sağlamak amacıyla birçok yöntem kullanılır. Sizlerle bugün en çok tercih edilen token biçimi olan JWT’nin derinliklerine ineceğiz 😊

Konuya girmeden önce bilmeniz gereken ve birbirine karıştırılmaması gereken iki önemli kavram bulunmaktadır: Authorization ve Authentication.

Bu kavramları açıklamadan önce şöyle bir senaryoyu ele alalım:
Çalıştığınız şirkete giriş sürecinizi düşünelim. Ana binaya giriş yapmak için ilk olarak kimliğinizin güvenlik birimi tarafından doğrulanması gerekir (Authentication). Bu aşamadan sonra giriş yapmak istediğiniz birimin girişinde yetki kartınızı okutmanız gerekir. Eğer o birime yetkiniz tanımlanmış ise giriş yapabilirsiniz. Yetkiniz yok ise sistem tarafından girişiniz engellenir (Authorization).

  • Authorization (Yetkilendirme): Kullanıcının yetkilerini tanımlar.
  • Authentication (Kimlik Doğrulama): Kullanıcının profilini tanımlar.
Authorization ve Authentication Örneği

JWT Nedir?

JWT, sistem tarafından kullanıcının doğrulanması ve hem kullanıcının hem de sistemin güvenliğinin sağlanması amacıyla kullanılan, RFC 7519 standardında tanımlanan bir token biçimidir. JWT’nin oluşturulma mantığı, kullanıcının verdiği JSON yapısındaki bir öğenin, şifreleme algoritmasından geçerek (genellikle HMAC algoritması) verilen anahtarla eşleştirilmesine dayanmaktadır.

JWT Yapısı

JWT ile üretilen token Base64 ile kodlanmış 3 ana kısımdan oluşmaktadır.

1. Header (Başlık):

Token’ın ilk kısmıdır. Oluşturulacak imzada hangi algoritmanın kullanılacağını belirtir. Alg (algoritma tipi) ve Typ (token tipi) olmak üzere iki alandan oluşur.

2. Payload (Yük/Veri):

Token’ın ikinci kısmıdır. Saklanacak verinin (data) tanımlandığı yerdir. Bu veriler claim olarak adlandırılır. Üç çeşit claim vardır:

  • Registered (Kayıtlı) Claim: JWT tarafından önceden ayrılmış üç harften oluşan tanımlamalardır. Bu bilgilerin girilmesi zorunlu değildir.
  • Public (Açık) Claim: İsteğe bağlı veri (data) oluşturulabilen alanlardır. Ancak veriler kayıtlı (registered) ya da URI’da tanımlanan parametreler ile aynı olmamalıdır.
  • Private (Gizli) Claim: İstemci (client) ve sunucu (server) arasında veri alışverişi için kullanılır.

Payload içerisinde hassas bilgiler olmamalıdır. Burası ortak ve decode edildiğinde işe yaramayacak veriler belirtilmelidir.

3. Signature (İmza): Bu kısım ile veri bütünlüğü garanti altına alınır. Oluşturulması için header, payload ve secret (gizli) anahtar gereklidir.

💥 JWT sitesine buradan giderek kendi token’ınızı üretip, token’ın yapısını inceleyebilirsiniz.

Bu kısma kadar token yapısı ve token’ın nasıl oluşturulacağı ile ilgili bilgi edindik 😊 Peki oluşturulan token’ın geçerlilik kontrolü nasıl sağlanıyor?

JWT Verify (Doğrulama)?

Doğrulama işlemi, client (istemci) tarafından token geldikten sonra, kullanıcının yetkisini kontrol etmek için kullanılır. Doğrulama işlemini en basit şekilde anlatacak olursak;

Görselde görülen HMAC JWT’nin imzalamak için kullandığı algoritmadır.

Doğrulanacak token 3 parçaya ayrılır;

  • 1. kısım Header(Başlık)
  • 2. kısım Payload (Veri)
  • 3. kısım Signature (İmza)

1. kısım ve 2. kısım sunucuda bulunan Secret Key ile imzalanarak 3. kısım oluşturulur. Yukarıdaki görselde görüldüğü üzere oluşturulan 3. kısım client tarafından gelen imza ile karşılaştırılır. İmzalar aynı olduğu zaman token geçerli sayılarak kullanıcıya erişim verilir. Eğer imzalar aynı değil ise token geçersiz sayılır.

Böylece ilk medium yazımın sonuna geldik. Umarım yazı faydalı olmuştur😊 Bana ulaşmak için:

Kaynak: Giphy

Konu hakkında farklı kaynaklardan yararlanmak isterseniz aşağıda bıraktığım blog yazılarını inceleyebilirsiniz.

--

--