JSON Web Token (JWT) Nedir ve PHP ile Nasıl Kullanılır?
Blog'a Dön

JSON Web Token (JWT) Nedir ve PHP ile Nasıl Kullanılır?

Buğra Şıkel

json web token
JSON Web Token (JWT), iki taraf arasında güvenli bir şekilde bilgi alışverişini sağlamak amacıyla kullanılan açık bir standarttır. Bu standart, bir JSON nesnesinin dijital imza ile doğrulanabilir hale getirilmesi prensibine dayanır. JWT’ler genellikle kimlik doğrulama ve yetkilendirme işlemleri için kullanılır.

JWT’nin Yapısı

JWT üç ana bileşenden oluşur:

  1. Header (Başlık): Algoritma türü ve token tipi gibi bilgileri içerir.
  2. Payload (Yük): Kullanıcı bilgileri, yetkilendirme bilgileri gibi token’ın taşıyacağı verileri içerir.
  3. Signature (İmza): Header ve Payload’un base64url formatında kodlanmış halinin, belirli bir gizli anahtar kullanılarak hash fonksiyonu ile imzalanmış halidir.

JWT’nin tipik bir yapısı şu şekildedir:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT Nasıl Çalışır?

JWT, istemci tarafında (client-side) oluşturulan ve saklanan bir token olup, bir kullanıcıyı doğrulamak veya yetkilendirmek amacıyla kullanılır. Kullanıcı sisteme giriş yaptığında, sunucu JWT’yi oluşturur ve istemciye geri gönderir. Bu token daha sonra her istek ile birlikte sunucuya gönderilir ve sunucu bu token’ı doğrulayarak isteği işler.

PHP ile Kütüphane Kullanılmadan JWT Nasıl Oluşturulur ve Doğrulanır?

JWT token’ları oluşturmak ve doğrulamak için genellikle kütüphaneler kullanılır, ancak bazı durumlarda kütüphane kullanmadan da bu işlemleri gerçekleştirmek isteyebilirsiniz. Aşağıda, PHP kullanarak JWT oluşturma ve doğrulama işlemlerini kütüphane olmadan nasıl yapabileceğinizi gösteren bir örnek bulunmaktadır.

JWT Token Oluşturma

JWT oluşturmak için önce bir header ve payload oluşturulur. Ardından bu veriler base64url formatında kodlanır ve birleştirilir. Son olarak, bu birleşim bir gizli anahtar ile HMAC-SHA256 algoritması kullanılarak imzalanır.

function base64UrlEncode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

function createJWT($header, $payload, $secretKey) {
    $headerEncoded = base64UrlEncode(json_encode($header));
    $payloadEncoded = base64UrlEncode(json_encode($payload));

    $signature = hash_hmac('sha256', "$headerEncoded.$payloadEncoded", $secretKey, true);
    $signatureEncoded = base64UrlEncode($signature);

    return "$headerEncoded.$payloadEncoded.$signatureEncoded";
}

// Kullanım Örneği
$header = [
    'alg' => 'HS256',
    'typ' => 'JWT'
];

$payload = [
    'userId' => 123,
    'iat' => time(),
    'exp' => time() + 3600
];

$secretKey = 'your-secret-key';
$jwt = createJWT($header, $payload, $secretKey);

echo "JWT Token: " . $jwt;
JWT Token Doğrulama

JWT doğrulama işlemi, token’ın parçalarını ayırmayı, imzayı yeniden hesaplamayı ve token’ın geçerlilik süresini kontrol etmeyi içerir.

function base64UrlDecode($data) {
    return base64_decode(strtr($data, '-_', '+/') . str_repeat('=', 3 - (3 + strlen($data)) % 4));
}

function verifyJWT($jwt, $secretKey) {
    list($headerEncoded, $payloadEncoded, $signatureEncoded) = explode('.', $jwt);

    $header = json_decode(base64UrlDecode($headerEncoded), true);
    $payload = json_decode(base64UrlDecode($payloadEncoded), true);
    $signature = base64UrlDecode($signatureEncoded);

    $validSignature = hash_hmac('sha256', "$headerEncoded.$payloadEncoded", $secretKey, true);

    if (hash_equals($validSignature, $signature)) {
        // Token'ın süresini kontrol et
        if ($payload['exp'] >= time()) {
            return $payload;
        }
    }

    return false;
}

// Kullanım Örneği
$jwt = "your.jwt.token.here";
$secretKey = 'supersecretkey';

$decodedPayload = verifyJWT($jwt, $secretKey);

if ($decodedPayload) {
    echo "JWT Doğrulandı! Kullanıcı ID: " . $decodedPayload['userId'];
} else {
    echo "JWT geçersiz veya süresi dolmuş.";
}

JWT, modern web uygulamalarında kimlik doğrulama ve yetkilendirme için etkili bir çözüm sunar. PHP ile kütüphane kullanmadan JWT oluşturmak ve doğrulamak mümkündür, ancak bu yaklaşım daha basit ve özelleştirilmiş ihtiyaçlar için uygundur. Üretim ortamlarında güvenliği artırmak ve hata yönetimini daha iyi sağlamak için genellikle bir kütüphane kullanılması önerilir.

Bu temel örnekler, JWT token’larının kütüphane kullanmadan nasıl oluşturulabileceği ve doğrulanabileceği konusunda bir başlangıç sağlar.

Bunları da beğenebilirsiniz

Flutter ve CRDT ile Sıfırdan Offline-First Senkronizasyon Motoru İnşası
8 Haziran 2026

Flutter ve CRDT ile Sıfırdan Offline-First Senkronizasyon Motoru İnşası

Mobil uygulamalarda veri kaybını sıfıra indiren offline-first mimarisi. Hybrid Logical Clock (HLC), SQLite ve CRDT kullanarak deterministik çakışma yönetimi.

Devamını Oku
Yüksek Trafikli Sistemlerde Cache Stampede ve Thundering Herd Koruması: İleri Düzey Stratejiler
23 Nisan 2026

Yüksek Trafikli Sistemlerde Cache Stampede ve Thundering Herd Koruması: İleri Düzey Stratejiler

Yüksek trafikli web uygulamalarında sistem çöküşlerini önlemek için AI tabanlı dinamik kilitleme ve probabilistik yazma yöntemlerini kullanarak ölçeklenebilirliği nasıl artıracağınızı keşfedin.

Devamını Oku
Otonom Veritabanı Şema Evrimi: AI Ajanları ile Sıfır Kesinti Süreli Migrasyon
11 Nisan 2026

Otonom Veritabanı Şema Evrimi: AI Ajanları ile Sıfır Kesinti Süreli Migrasyon

AI tabanlı ajanların veritabanı şema yönetimini nasıl otomatikleştirdiğini ve sıfır kesinti süreli migrasyon mimarilerinin teknik detaylarını bu makalede keşfedin.

Devamını Oku
AI Asistan