JWT Nedir?

JSON Web Tokens

JWT iletişim halindeki taraflar arasında güvenli şekilde veri alışverişini sağlayan standarttır. Servis güvenliği, kullanıcı doğrulama, bilgi alışverişi gibi işlemlerde kullanılmaktadır. JSON Web Tokens tercihinin temel sebebi JSON halinde taşınan verilerin doğrulanabilmesidir. Doğrulama işlemi ve token içerisindeki verilerin kullanılabilmesi bir HTTP isteği gerektirmediğinden dolayı uygulama performansını arttırmaktadır.

Authentication işlemleri yerine Authorization işlemlerinde kullanılmaktadır. Authentication işlemi kullanıcı credential bilgilerinin doğrulanmasıdır. OAuth 2.0 protokolünün bir parçası değildir ve çoğu Identity Provider tarafından desteklenmektedir.

JWT implementasyonu ASP.NET Core Identity: Token-Based Authentication başlıklı yazıda yapılmıştır.

Bir JWTJSON formatında üç bölümden meydana gelerek noktayla birbirlerinden ayrılmaktadır. Bu bölümler base64url ile encode edilmiştir ve decode edilerek okunabilmektedir. Son bölüm binary halinde olduğundan decode işlemi sonrasında anlamsız veriler ortaya çıkacaktır.

JWT (Json web tokens) nedir

Bunlar HeaderPayload ve Signature bölümleridir. Oluşturulan token dijital olarak imzalandığından güvenli ve doğrulanabilirdir. Bir token içerisinde veriler claim şeklinde taşınmaktadır. Claim JSON objesindeki key-value çiftinden başka bir şey değildir.

Header

Header bölümünde token’ın nasıl oluşturulduğu hakkında bilgiler yer alır.

  • alg ile token imzalanırken kullanılan algoritma,
  • typ ile token tipi tutulmaktadır.

Payload

Payload bölümünde claim listesi şeklindeki JSON objesi yer alır. İsteğe göre özelleştirilerek ekstra bilgiler (kullanıcı gibi) tutulabilmektedir. Bu bölümdeki veriler okunabildiğinden hassas veriler burada taşınmamalıdır. Üç tür claim bulunmaktadır.

Registered claims 

Önceden tanımlı alanlardır ve kullanılması tavsiye edilmektedir. Tanımlı tüm claim listesine buradan ulaşabilirsiniz. Bazıları aşağıda paylaşılmıştır.

  • sub ile jetonun kim için oluşturulduğu,
  • iss ile jetonun kim tarafından oluşturup imzalandığı,
  • aud ile jetonun hedef kitlesi,
  • jti ile jetonun (unique identifier) benzersiz kimliği,
  • exp ile jetonun geçerli olacağı süre,
  • iat ile jetonun oluşturulduğu zaman,
  • nbf ile jetonun hangi süreden itibaren geçerli olacağı belirtilmektedir.

Public Claims

İsteğe göre eklenirler. Çakışmaları önlemek için IANA JSON Web Token Registry üzerinden veya çakışmaya dayanıklı namespace içeren bir URI olarak tanımlanmaları gerekmektedir.

Private Claims

Gereksinimler doğrultusunda isteğe göre eklenirler. Yeni claim eklenirken registered alanlarla aynı key kullanılmamalıdır.

Signature

Signature bölümünde headerpayload ve security key kullanılarak oluşturulan imza yer almaktadır. Bu bölüm üzerinden doğrulama yapılarak veri bütünlüğü garanti altına alınmaktadır.

Bir JWT symmetric key (shared key) ve asymmetric key (private key, public key) yöntemlerinden biri kullanılarak imzalanmaktadır. Symmetric Key kullanıldığında imzalama ve doğrulama işlemlerinde aynı key kullanılmaktadır. Asymmetric Key kullanıldığında imzalama işlemi private key kullanılarak yapılmakta ve kimseyle paylaşılmamalıdır. Doğrulama işlemiyse public key üzerinden gerçekleşmektedir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir