PHP ile JWT Authentication (Token Tabanlı Giriş Sistemi)

Modern web uygulamalarında oturum yönetimi artık klasik session yapısından token tabanlı sistemlere geçmiştir. JWT (JSON Web Token) sayesinde kullanıcı doğrulama işlemleri daha güvenli ve ölçeklenebilir hale gelir.

JWT Nedir?

JWT, kullanıcı doğrulamasını stateless şekilde yapan bir güvenlik mekanizmasıdır. Sunucu, giriş yapan kullanıcı için bir token üretir ve bu token istemci tarafından saklanır.

💡 API tabanlı sistemlerde en yaygın kullanılan kimlik doğrulama yöntemidir.

JWT Yapısı

HEADER.PAYLOAD.SIGNATURE
  • Header: Algoritma bilgisi
  • Payload: Kullanıcı verisi
  • Signature: Güvenlik imzası

Adım 1: Token Oluşturma

JWT Token Oluşturma
<?php

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

function createJWT($userId){

$header = json_encode(['typ'=>'JWT','alg'=>'HS256']);
$payload = json_encode([
    'user_id' => $userId,
    'iat' => time(),
    'exp' => time() + 3600
]);

$base64UrlHeader = base64UrlEncode($header);
$base64UrlPayload = base64UrlEncode($payload);

$signature = hash_hmac('sha256',
    $base64UrlHeader . "." . $base64UrlPayload,
    "SECRET_KEY",
    true
);

$base64UrlSignature = base64UrlEncode($signature);

return $base64UrlHeader.".".$base64UrlPayload.".".$base64UrlSignature;

}

?>

Adım 2: Girişte Token Üretme

<?php

if($email == $dbUser && $password == $dbPass){
    $token = createJWT($userId);
    echo json_encode(["token" => $token]);
}

?>

Adım 3: Token Doğrulama

Token Doğrulama
<?php

function verifyJWT($jwt){

list($header,$payload,$signature) = explode(".", $jwt);

$validSignature = base64UrlEncode(hash_hmac(
    'sha256',
    $header.".".$payload,
    "SECRET_KEY",
    true
));

return $signature === $validSignature;

}

?>

JWT Kullanım Senaryoları

  • API güvenliği
  • Mobil uygulama login
  • SPA uygulamaları
  • Mikroservis sistemleri
Güvenlik İpucu: Token süresini kısa tutmak güvenliği artırır.