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
<?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
<?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.