JWT (JSON Web Token) Nedir ve Neden Önemlidir?
Günümüzdeki web uygulamalarının hemen hemen hepsinde kullanıcıların kimliklerini doğrulamak ve yetkilendirmelerini yönetmek gerekmektedir. Bu nedenle, güvenli bir kimlik doğrulama ve yetkilendirme sistemi, web uygulamaları için çok önemlidir.
JWT Nedir?
JWT (JSON Web Token), veri transferini güvenli bir şekilde sağlamak ve kullanıcının bilgilerini doğrulamak için kullanılan, JSON formatındaki bir standarttır.
JWT’nin Kullanım Amacı
JWT’ler, sunucu ve browser arasında güvenli ve taşınabilir bir kimlik doğrulama mekanizması sağlar. Kullanıcı oturumlarının yönetimi için idealdir. Sunucuya atılan her istek esnasında kullanıcının kimlik bilgilerinin doğrulamasını sağlar. Böylece ölçeklenebilir bir uygulama geliştirme imkanı sunar.
JWT, kullanıcı oturumlarının yönetimi, kimlik doğrulaması, tek oturum açma (single sign-on), API yetkilendirmesi ve güvenli veri paylaşımı gibi birçok senaryoda kullanılır.
Nelere Dikkat Edilmelidir?
JWT’nin güvenliği, doğru kullanımına bağlıdır. Aşağıdaki noktalara dikkat ederek JWT’nin güvenliğini sağlamak önemlidir:
- Gizli bilgiler içeren JWT, güvenli bir şekilde saklanmalıdır.
- JWT’nin doğruluğunu sağlamak için, signature bölümündeki gizli anahtar (secret key) kontrol edilmelidir.
- JWT’nin süresi dolmuşsa, yeniden kimlik doğrulama işlemi yapılmalıdır.
- JWT’nin hangi hizmet tarafından oluşturulduğu ve hedef kitlesi kontrol edilmelidir.
JWT Yapısı
JWT’ler, header (başlık), payload (yük) ve signature (imza) olmak üzere üç bileşenden oluşur.
1. Header (Başlık):
JWT’nin türünü (typ) ve kullanılan şifreleme algoritmasını (alg) belirtir.
Örnek:
{
"typ": "JWT",
"alg": "HS256"
}
2. Payload (Yük):
Payload, JWT içinde saklanması istenen verileri içerir. Bu veriler, kullanıcıya özgü bilgiler, talepler veya diğer verilerden oluşur.
Örnek:
{
"userId": "12345678", // Kullanıcı ID'si
"userName": "Aziz Şentürk", // Kullanıcı adı
"...": "...", // İstenen diğer veriler
"jti": "87654321", // (JWT ID) Tekrar kullanımı engellenmek veya izlemek için JWT'ye özgü ID
"iat": 1687699800, // (Issued At) JWT'nin ne zaman oluşturulduğu bilgisi
"nbf" : 1688202000, // (Not Before) JWT'nin geçerlilik başlangıç zaman bilgisi
"exp" : 1750842000, // (Expiration Time) JWT'nin geçerlilik bitiş zaman bilgisi
"iss" : "2WCreative", // (Issuer) JWT'nin hangi hizmet tarafından oluşturulduğu
"aud" : "2WDigiCard", // (Audience) JWT'nin hangi hedef kitle tarafından kullanılabileceği
}
3. Signature (İmza)
Signature, JWT’nin güvenilirliğini sağlamak için kullanılan bir dijital imzadır. Bu imza sayesinde, JWT’nin değiştirilmediği ve güvenli olduğu kontrol edilir.
JWT Kullanımı
1. Token Oluşturma
Sunucu, kullanıcının kimlik bilgilerini doğrular ve bir JWT oluşturur. Oluşturulan JWT, header, payload ve signature kısımlarını içerir.
Örnek:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3OCIsInVzZXJOYW1lIjoiQXppeiDFnmVudMO8cmsiLCIuLi4iOiIuLi4iLCJqdGkiOiI4NzY1NDMyMSIsImlhdCI6MTY4NzY5OTgwMCwibmJmIjoxNjg4MjAyMDAwLCJleHAiOjE3NTA4NDIwMDAsImlzcyI6IjJXQ3JlYXRpdmUiLCJhdWQiOiIyV0RpZ2lDYXJkIn0.lwq1xcqb1mFaOXDeSfKw68DAHjDC53O89DIbvPJ1HKQ
2. Token İletimi
Sunucu, oluşturulan JWT’yi browser’a ileterek kullanıcıya yanıt verir. Browser, her isteği Authorization başlığı altında JWT ile sunucuya gönderir.
Örnek:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3OCIsInVzZXJOYW1lIjoiQXppeiDFnmVudMO8cmsiLCIuLi4iOiIuLi4iLCJqdGkiOiI4NzY1NDMyMSIsImlhdCI6MTY4NzY5OTgwMCwibmJmIjoxNjg4MjAyMDAwLCJleHAiOjE3NTA4NDIwMDAsImlzcyI6IjJXQ3JlYXRpdmUiLCJhdWQiOiIyV0RpZ2lDYXJkIn0.lwq1xcqb1mFaOXDeSfKw68DAHjDC53O89DIbvPJ1HKQ
3. Token Doğrulama
Sunucu, her gelen isteği doğrulamak için JWT’nin imzasını kontrol eder. İmza doğrulandığında, sunucu JWT içindeki kullanıcı bilgilerini kullanarak talebi işler. İmza doğrulanamazsa veya JWT süresi dolmuşsa sunucu hata mesajı veya uygun yanıt gönderir.
Özetlemek gerekirse, JWT (JSON Web Token) kimlik doğrulama ve yetkilendirme için kullanılan bir standarttır. JWT, header, payload ve signature kısımlarından oluşur. Header, kullanılan algoritmayı, payload, kullanıcıya özgü bilgileri, signature ise JWT’nin güvenilirliğini sağlar. JWT, güvenli ve taşınabilir bir kimlik doğrulama mekanizması olarak kullanılır.