OAuth 2.0 nedir? Authorization Code (PKCE) ve Client Credentials akışları nasıl çalışır?
Cevap
OAuth 2.0 bir yetkilendirme (authorization) çerçevesidir: bir uygulamanın, kullanıcının şifresini öğrenmeden, kullanıcı adına sınırlı yetkiyle (scope) bir kaynağa erişmesini sağlar. Kimlik doğrulama (authentication) için üzerine OpenID Connect (OIDC) katmanı eklenir ve id_token döner.
Roller
- Resource Owner: kullanıcı
- Client: erişim isteyen uygulama
- Authorization Server: token veren sunucu (Keycloak, Auth0, Google)
- Resource Server: korunan API
Authorization Code + PKCE (kullanıcılı akış)
Web, SPA ve mobil uygulamalar için önerilen akıştır.
- Client rastgele bir
code_verifierüretir, bunun SHA-256 özetinicode_challengeolarak hazırlar. - Kullanıcı authorization server'a yönlendirilir:
/authorize?response_type=code&client_id=...&redirect_uri=...&scope=read&state=xyz&code_challenge=...&code_challenge_method=S256 - Kullanıcı giriş yapıp onay verir;
redirect_uri'ye kısa ömürlü bircodevestatedöner. - Client
state'i kontrol eder (CSRF koruması),code+code_verifierile/tokenucundan access token ve refresh token alır. - API çağrılarında
Authorization: Bearer <access_token>kullanılır.
PKCE, yakalanan code'un başkası tarafından token'a çevrilmesini engeller; çünkü saldırgan code_verifier'ı bilmez.
Client Credentials (makineden makineye)
Kullanıcı yoktur; servis kendi kimliğiyle token alır:
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=fatura-servisi&client_secret=...&scope=orders.readMikroservisler arası ve cron işleri için kullanılır.
Kullanılmaması gerekenler
- Implicit flow: token URL fragment'ında döner, sızmaya açıktır; OAuth 2.1 ile kaldırıldı.
- Resource Owner Password: client kullanıcının şifresini görür; OAuth'un amacına aykırıdır.
Token pratikleri
Access token kısa ömürlü (5-15 dk), refresh token uzun ömürlü ve rotate edilerek kullanılır. Resource server token'ın imzasını, exp, aud ve scope alanlarını doğrulamalıdır.
İlgili API Tasarımı soruları
- HTTP 401 ile 403 durum kodları arasındaki fark nedir?
- JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?
- Idempotency nedir? Hangi HTTP metotları idempotent'tir?
- Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.
- gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?
- Webhook nedir? Güvenilir ve güvenli bir webhook sistemi nasıl tasarlanır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.