Konuyu Açan
#0
OAuth 2.0 ve OpenID Connect modern internetin kimlik ve yetkilendirme omurgasını oluşturan iki kritik protokoldür.
ÖNEMLİ:
ID Token sadece OpenID Connect’e özgüdür.
OAuth 2.0 kendi başına kimlik doğrulama yapmaz.
API erişimi yerine kullanıcının kimliğini doğrulamak için kullanılır.
OIDC’nin getirdiği EKSİTRA bileşenler:
- OAuth 2.0 → Yetkilendirme (Authorization) protokolüdür.
- OpenID Connect → Kimlik Doğrulama (Authentication) protokolüdür.
- OIDC, OAuth 2.0 üzerine inşa edilmiştir.
| Protokol | Ne İşe Yarar? | Tür | Mantık |
|---|---|---|---|
| OAuth 2.0 | Bir uygulamanın bir kullanıcının verilerine sınırlı ve güvenli erişimini sağlar. | Yetkilendirme | “Bu uygulama şu verilere erişebilir mi?” |
| OpenID Connect | Kullanıcının kimliğini doğrulamak için güvenli giriş sistemi sağlar. | Kimlik Doğrulama | “Bu kullanıcı gerçekten o mu?” |
🧩 1. Temel Kavramlar ve Roller
OAuth 2.0 Rol Tabloları
| Rol | Açıklama |
|---|---|
| Resource Owner | Verinin sahibi (kullanıcı). |
| Client | Veriye erişmek isteyen uygulama (ör. mobil app). |
| Resource Server | Korunan verinin bulunduğu API. |
| Authorization Server | Token üreten güvenlik sunucusu. |
OpenID Connect’de Ek Roller
| Rol | Açıklama |
|---|---|
| OpenID Provider (OP) | Kimlik doğrulayan sunucu (Google, Apple vs.). |
| Relying Party (RP) | Kimlik doğrulama hizmetini kullanan uygulama. |
📜 2. OAuth 2.0 Akışları (Grant Types)
OAuth 2.0, kullanım senaryosuna göre farklı yetkilendirme akışları sunar.Tablo: En Yaygın OAuth Akışları
| Grant Type | Kullanım Alanı | Güvenlik Seviyesi | Açıklama |
|---|---|---|---|
| Authorization Code | Web uygulamaları | Çok yüksek | En güvenli yöntem, kod + token değişimi. |
| PKCE (Code + PKCE) | Mobil ve SPA | En yüksek | Ek güvenlik: code_verifier + code_challenge |
| Client Credentials | Sunucu ↔ Sunucu API | Yüksek | Kullanıcı yok; sadece uygulama kimliği. |
| Refresh Token | Uzun süreli oturum | Yüksek | Yeni access token almaya yarar. |
🔐 3. Token Türleri (Teknik Tablo)
| Token Türü | Ne İçerir? | Kullanım | Süre |
|---|---|---|---|
| Access Token | İzinler (scope), süre, client ID | API erişimi | Kısa süreli |
| Refresh Token | Kimlik yenileme yetkisi | Yeni access token almak için | Uzun süreli |
| ID Token (OIDC) | Kullanıcı bilgisi, kimlik, oturum verisi | Kimlik doğrulama | Kısa süreli |
ID Token sadece OpenID Connect’e özgüdür.
OAuth 2.0 kendi başına kimlik doğrulama yapmaz.
🧠 4. OAuth 2.0 Nasıl Çalışır? (Teknik Akış Şeması)
Authorization Code Flow (PKCE ile)
| Adım | Teknik Açıklama |
|---|---|
| 1 | Client, kullanıcıyı Authorization Server'a yönlendirir. |
| 2 | Kullanıcı giriş yapar ve izin verir. |
| 3 | Authorization Server, Client’a Authorization Code gönderir. |
| 4 | Client, bu kodu + PKCE verilerini sunucuya gönderir. |
| 5 | Authorization Server doğrular ve Access Token + ID Token üretir. |
| 6 | Client bu token’larla API’lara erişir. |
🔍 5. OpenID Connect Nedir? (Teknik Derinlik)
OpenID Connect, OAuth 2.0’ın üzerine eklenmiş bir kimlik doğrulama katmanıdır.API erişimi yerine kullanıcının kimliğini doğrulamak için kullanılır.
OIDC’nin getirdiği EKSİTRA bileşenler:
| Bileşen | Açıklama |
|---|---|
| ID Token | JWT formatında, kullanıcıyı doğrulayan ana token |
| UserInfo Endpoint | Kullanıcı profili bilgilerini veren API |
| /.well-known/openid-configuration | OP’nin yapılandırma JSON dosyası |
ID Token İçeriği (JWT Claim Tablosu)
| Claim | Açıklama |
|---|---|
| sub | Kullanıcının benzersiz ID’si |
| iss | Token'ı veren sunucu |
| aud | Hedef client ID |
| iat / exp | Token başlangıç/bitiş |
| auth_time | Kullanıcı son giriş zamanı |
| acr / amr | Kullanılan kimlik doğrulama yöntemi |
🔎 6. OAuth 2.0 vs OpenID Connect (Karşılaştırma Tablosu)
| Konu | OAuth 2.0 | OpenID Connect |
|---|---|---|
| Amaç | Yetkilendirme | Kimlik Doğrulama |
| Token Türü | Access, Refresh | + ID Token |
| Kullanıcı Bilgisi | Vermez | Verir |
| Kullanım Alanı | API erişimi | Giriş sistemi |
| Örnek | “Bu app Google Drive verine erişsin mi?” | “Google ile Giriş Yap” |
🔐 7. Teknik Örnek: Token Yapısı (JWT Örneği)
Access Token (OAuth)
JSON
1234567{
"iss": "https://auth.server.com",
"aud": "api.example.com",
"sub": "user123",
"scope": "read write",
"exp": 1731549050
}
ID Token (OpenID Connect)
JSON
123456789{
"iss": "https://accounts.google.com",
"aud": "client-12345",
"sub": "google-user-9988",
"email": "[email protected]",
"email_verified": true,
"auth_time": 1731548000,
"exp": 1731549050
}
🧭 8. Güvenlik Mekanizmaları
| Güvenlik Yöntemi | Açıklama |
|---|---|
| PKCE | Kod çalma saldırılarını engeller. |
| Nonce | ID Token replay saldırısı koruması. |
| State Parametresi | CSRF koruması. |
| HTTPS Zorunluluğu | Token’ların çalınmasını engeller. |
| Short-lived Access Token | Token ele geçirilse bile işe yaramaz. |
⚠️ 9. Sık Yapılan Yanlışlar
| Hata | Sonuç |
|---|---|
| Access Token'i localStorage’da tutmak | XSS ile çalınır |
| Refresh Token’i frontend’e vermek | Token ele geçirilir |
| HTTPS kullanmamak | MITM saldırısı |
| PKCE kullanmamak | Authorization Code Injection |
🧩 10. Sonuç ve Özet
| Başlık | Açıklama |
|---|---|
| OAuth 2.0 | Veriye erişim yetkisi sağlar |
| OpenID Connect | Kimlik doğrulama sağlar |
| Access Token | API erişim bileti |
| ID Token | Kullanıcının kimlik doğrulama belgesi |
| PKCE | Mobil/SPA için zorunlu güvenlik katmanı |
