← Back to Blog
TEKNIK

OAuth ve JWT Nedir?

F. Çağrı BilgehanFebruary 11, 202612 min read
oauthjwtgüvenlikauthentication

OAuth ve JWT Nedir? Modern Kimlik Doğrulama Rehberi

"Google ile Giriş Yap" butonunu her gün tıklıyorsunuz. Peki arka planda ne oluyor? OAuth 2.0 ve JWT ile modern kimlik doğrulamanın nasıl çalıştığını öğrenin.

Authentication vs Authorization

| Kavram | Soru | Örnek | |--------|------|-------| | Authentication | Kim olduğunu kanıtla | Giriş yap (kullanıcı adı + şifre) | | Authorization | Ne yapabileceğini kontrol et | Admin mi, user mı? |

JWT (JSON Web Token) Nedir?

JWT, iki taraf arasında güvenli bilgi aktarımı sağlayan kompakt bir token formatıdır. Üç bölümden oluşur:

eyJhbGciOi... . eyJzdWIiOi... . SflKxwRJSM...
   Header         Payload         Signature

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

{
  "sub": "user-42",
  "name": "Ali Yılmaz",
  "role": "admin",
  "iat": 1708000000,
  "exp": 1708003600
}

Akış

1. Kullanıcı giriş yapar (email + şifre)
2. Sunucu kimlik doğrular
3. JWT token oluşturur ve döner
4. İstemci her istekte token gönderir
5. Sunucu token'ı doğrular (imza kontrolü)

JWT Oluşturma (Node.js)

const jwt = require('jsonwebtoken');

// Token oluştur
const token = jwt.sign(
  { userId: 42, role: 'admin' },
  process.env.JWT_SECRET,
  { expiresIn: '1h' }
);

// Token doğrula
try {
  const decoded = jwt.verify(token, process.env.JWT_SECRET);
  console.log(decoded.userId); // 42
} catch (err) {
  console.log('Geçersiz token');
}

JWT Middleware

function authMiddleware(req, res, next) {
  const token = req.headers.authorization?.split(' ')[1];
  
  if (!token) return res.status(401).json({ error: 'Token gerekli' });
  
  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch {
    res.status(401).json({ error: 'Geçersiz token' });
  }
}

OAuth 2.0 Nedir?

OAuth 2.0, bir uygulamanın kullanıcı adına başka bir servise erişmesini sağlayan yetkilendirme protokolüdür.

Authorization Code Flow

1. Kullanıcı → "Google ile Giriş Yap" tıklar
2. Uygulama → Google'a yönlendirir
3. Kullanıcı → Google'da oturum açar, izin verir
4. Google → Uygulamaya authorization code döner
5. Uygulama → Code ile Google'dan access token alır
6. Uygulama → Token ile Google API'lerini kullanır

OAuth 2.0 Rolleri

| Rol | Açıklama | Örnek | |-----|----------|-------| | Resource Owner | Kullanıcı | Siz | | Client | Token isteyen uygulama | Web uygulamanız | | Authorization Server | Token veren sunucu | Google, GitHub | | Resource Server | Korunan API | Google Calendar API |

Token Türleri

| Token | Ömür | Kullanım | |-------|------|----------| | Access Token | 15-60 dk | API istekleri | | Refresh Token | 7-30 gün | Yeni access token alma | | ID Token | 15-60 dk | Kullanıcı bilgisi (OpenID Connect) |

Access + Refresh Token Stratejisi

// Access token süresi dolunca
async function refreshAccessToken(refreshToken) {
  const response = await fetch('/api/auth/refresh', {
    method: 'POST',
    body: JSON.stringify({ refreshToken }),
  });
  
  const { accessToken, refreshToken: newRefresh } = await response.json();
  
  // Yeni token'ları sakla
  localStorage.setItem('accessToken', accessToken);
  localStorage.setItem('refreshToken', newRefresh);
  
  return accessToken;
}

Güvenlik Best Practices

  1. Token'ı HttpOnly cookie'de saklayın — XSS'e karşı koruma
  2. Kısa ömürlü access token — 15-60 dakika
  3. Token rotation — Her refresh'te yeni refresh token verin
  4. HTTPS zorunlu — Token'lar ağ üzerinde şifrelenmeli
  5. Payload'a hassas veri koymayın — JWT decode edilebilir
  6. PKCE kullanın — SPA ve mobil uygulamalarda ekstra güvenlik

Session vs JWT

| Özellik | Session | JWT | |---------|---------|-----| | Depolama | Sunucu (Redis) | İstemci | | Ölçeklenebilirlik | State paylaşımı gerekir | Stateless | | Geçersiz kılma | Kolay (sil) | Zor (blacklist gerekir) | | Boyut | Küçük (session ID) | Büyük (payload) |

Sonuç

OAuth 2.0 ve JWT, modern web uygulamalarının kimlik doğrulama ve yetkilendirme altyapısını oluşturur. JWT stateless token'lar sağlar, OAuth ise üçüncü parti entegrasyonu için standart bir protokol sunar. İkisini birlikte kullanarak güvenli ve ölçeklenebilir bir auth sistemi kurabilirsiniz.

Güvenlik ve authentication konularını LabLudus platformunda pratik yaparak öğrenin.

Related Posts

Acik Kaynak Yazilim Rehberi: Nedir, Nasil Katki Yapilir?

Acik kaynak yazilim nedir ve nasil katkida bulunulur?

CI/CD Nedir? Surekli Entegrasyon ve Dagitim Rehberi

CI/CD nedir ve nasil kurulur?