JSON Web Token (JWT) Standardı

Burak Coşkun
Bilişim Hareketi
Published in
3 min readAug 13, 2019

Bu makalede, JSON Web Token Standardı’nın tanımına ve kullanımı üzerine değineceğiz.

JSON Web Token (JWT), iletişim içinde olan iki taraf arasındaki veri alışverişinin JSON objesi (token) kullanılarak güvenli bir şekilde yapılmasını tanımlayan bir endüstri standardıdır (Ayrıntılı bilgi için RFC 7519).

JSON Web Token’ı ne zaman kullanmalısınız?

Yetkilendirme: Bu JWT’yi kullanmak için en yaygın senaryodur. Kullanıcı bir kez oturum açtığında, bunu takip eden her istek JWT’yi içerecek ve sistem kullanıcıya bu tokenle izin verilen route’lara, servislere ve metodlara erişime izin verecektir.

Bilgi Alışverişi: JSON Web Token, taraflar arasındaki bilgi alışverişinin güvenli bir şekilde yapılmasının iyi bir yoludur. JWT’ler imzalanabildiği için örneğin, public/private anahtar çiftleri kullanarak gönderenlerin onlar olduğuna emin olabilirsiniz.

JSON Web Token Yapısı

3 kısımdan oluşmaktadır.

  • Header (Başlık)
  • Payload (Yük)
  • Signature (İmza)

Bu üç parça nokta ile(.) birbirinden ayrılır. Aslında yapısı aşağıdaki şekildedir.

JWT Yapısı: “hhhhhhhhhh.ppppppppp.ssssssss”

Header: İki tip bilgi içermektedir. Bunlardan biri Hashleme algoritmasıdır. (HS256, RS512, ES356), diğeri ise tipi o da JWT’dir.

//Örnek Header Yapısı:
{
“alg”: “HS256”,
“typ”: “JWT”
}

Bu JSON objesi Base64 algoritması ile hashlenmiş şekli JWT nin ilk bölümü oluşturacaktır.

Payload: Payload, giriş yapan kullanıcının bilgilerini örneğin kullanici id, kullanici adi ve kullanıcının yönetici kullanıcı olup olmadığı hakkındaki bilgileri içerir. JWT Token ları encrypt edilmediği için herhangi bir base64 kod çözücü ile decode edilebilir, bu nedenle payload içinde hassas bilgiler bulunmamalıdır.

Üç tür payload vardır: reserved, public, and private talep.

  • Reserved (Ayrılmış) claim’ler: Önceden tanımlanmış claim’lerdir. Kullanılması zorunlu değildir fakat önerilir. Bunlardan bazıları: iss (issuer) (yayınlayıcı), exp(expiration time) (son kullanım zamanı), sub (subject) (konu), aud (audience) (hedef kitle) ve diğerleridir.
  • Public (Açık) claim’ler: İsteğe göre eklenen alanlardır. Fakat rezerve edilmiş IANA JSON Web Token kayıtları veya URI’da tanımlanan parametreler ile kullanımın çakışmasından kaçınılmalıdır.
  • Private (Gizli) claim’ler: Bilgi paylaşımı için tarafların kendi aralarında anlaştığı özel claim’lerdir.

Örnek bir payload yapısı:

{
"sub": "1234567890",
"name": "Burak Coskun",
"admin": true
}

Payload JSON bilgisi ise Base64 ile kodlanarak JWT’nin ikinci parçasını oluşturacaktır.

Signature(İmza): JWT’nin onaylanmasından imza sorumludur. Signature kısmınının oluşması için, base64 ile encodlanmış header, base64 ile encodlanmış payload ve belirlenen bir secret key’ e gereklidir. Sonrasında imza oluşturmak için header’da tanımlanan hashleme algoritması kullanılır.

HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)

Önceki header ve payload bilgisinin encode edilmiş hali ve secret kullanılarak imzalanmış yapıdan oluşan bir JWT aşağıdaki gibidir.

Base64 string ifadelerinin nokta ile birleştirilmesiyle oluşan JWT, XML-temelli daha karmaşık standartların aksine HTML ve HTTP ortamlarda kolayca aktarılabilir.

JWT ile örnek yapmak için jwt.io‘yu ziyaret edebilir ve işlemleri pratiğe dökebilirsiniz.

Kısaca JWT Kimlik Doğrulama Mekanizması

JWT(Json Web Token) ile kimlik doğrulama mekanizmasında kullanıcının kimliği doğrulandıktan sonra, kullanıcıya geri gönderilmek üzere sunucu tarafından bir JWT anahtarı oluşturulur.

Yani client tarafı işlemlerini yapabilmesi için JWT anahtarını bir sonraki http isteğinin header kısmında bulundurmalıdır. Web API sunucusu da bu token ın geçerliliğini kontrol ederek yetkilendirme işlemini gerçekleştirmektedir. Bu yetkilendirme işleminin başarılı olması sonucunda ilgili bilgiler elde edilmektedir.

İstemci-Sunucu Arasında Token ile İşlem Gerçekleştirilmesi

Bu yazıda kısaca JSON Web Tokens (JWT) tanımı ve kimlik doğrulamanın nasıl gerçekleştiğinden bahsettim. Faydalı olması dileğiyle.

Makalemi beğendiyseniz alkışlamanız beni mutlu edecek.. :)

Yeni yazılarımdan haberdar olmak için beni twitter, linkedin veya medium hesaplarımdan takip edebilirsiniz.

Makalede aklınıza takılan, net olmayan veya belirtmek istediğin bir şey varsa aşağıdaki yorum kısmına yazabilirsiniz. Faydası olması dileğiyle..

--

--