JWT Nedir ve Neden Kullanılır?
1. Header (Başlık): Token’ın hangi algoritma ile imzalanacağını belirtir.
2. Payload (Yük): Kullanıcı bilgilerini içerir, örneğin kullanıcı adı, e-posta adresi gibi.
3. Signature (İmza): Header ve Payload'ın güvenliğini sağlamak için kullanılan imzadır.
JWT'nin temel avantajı, her iki taraf arasında güvenli bir veri iletimi sağlamak için kullanılmasıdır. Ancak, bazı durumlarda bu token'lar hata verebilir ve en yaygın karşılaşılan hatalardan biri "Invalid Signature" hatasıdır.
"Invalid Signature" Hatası Nedir?
# 1. Anahtar Değişikliği
JWT imzası oluşturulurken kullanılan gizli anahtar (secret key) ile doğrulama yapılır. Eğer gizli anahtar değişmişse, önceki token'lar artık geçersiz hale gelir ve bu da "Invalid Signature" hatasına yol açar.
JWT oluşturulurken kullanılan imza algoritması (örneğin, HMAC SHA256 veya RS256) ile doğrulama yapıldığında, eğer bu algoritmalar farklıysa da imza doğrulanamaz.
# 3. Token’ın Manipülasyonu
Bir saldırgan, token’ın içeriğini değiştirmeye çalışmış olabilir. Eğer token üzerinde herhangi bir değişiklik yapılırsa, imza artık geçerli olmayacaktır ve hata alınır.
JWT'lerin genellikle bir "expiration time" (geçerlilik süresi) vardır. Eğer token süresi dolmuşsa, imza doğrulama hatasına yol açabilir.
"Invalid Signature" Hatası Nasıl Çözülür?
# 1. Gizli Anahtarı Kontrol Edin
İlk olarak, kullanılan gizli anahtarın doğru olduğundan emin olun. Özellikle dağıtım aşamasında anahtar değişmişse, eski token'lar geçersiz olacaktır. Eğer sistemde anahtar değişikliği yapıldıysa, eski token'ların yeniden doğrulanamayacağını unutmayın.
JWT oluşturulurken kullanılan imza algoritmasının doğru olduğundan emin olun. API sunucunuz ile istemci arasındaki algoritma uyumsuzluğu bu hataya yol açabilir. HMAC SHA256 gibi simetrik algoritmalar, her iki tarafın aynı gizli anahtara sahip olmasını gerektirir. RS256 gibi asimetrik algoritmalar ise farklı özel ve genel anahtar çiftleri kullanır. Her iki tarafın da aynı algoritmayı kullandığından emin olun.
# 3. Token'ın Geçerliliğini Kontrol Edin
Token’ın süresinin dolup dolmadığını kontrol edin. Eğer token’ın süresi dolmuşsa, yeni bir token oluşturmanız gerekecek. Genellikle JWT, `exp` (expiration) claim’i ile süresini belirler. Bu claim’in doğruluğunu kontrol edin.
Token’ın manipüle edilmediğinden emin olun. Web uygulamanızda token’ların güvenliğini sağlamak için HTTPS kullanmak çok önemlidir. Böylece token'lar ağ üzerinden güvenli bir şekilde iletilir.
Kod Örneği: JWT İmzasını Doğrulamak
import jwt
# Gizli anahtar
secret_key = 'your-secret-key'
# Token'ınızı buraya yerleştirin
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.T1J23Yv9LqWQsZc9x7NtnL5svPY9T4kOJlFEj0V1jk4'
try:
# Token'ı doğrulama
decoded = jwt.decode(token, secret_key, algorithms=['HS256'])
print("Token doğrulandı: ", decoded)
except jwt.InvalidSignatureError:
print("Invalid Signature hatası! Token imzası geçersiz.")
except jwt.ExpiredSignatureError:
print("Token süresi dolmuş!")
except jwt.DecodeError:
print("Token decode hatası!")
Bu kod, verilen token'ın geçerli olup olmadığını kontrol eder ve "Invalid Signature" hatasını yakalar. Kendi gizli anahtarınızı kullanarak bu kodu uygulamanızda test edebilirsiniz.