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.

  1. Client rastgele bir code_verifier üretir, bunun SHA-256 özetini code_challenge olarak hazırlar.
  2. 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
  3. Kullanıcı giriş yapıp onay verir; redirect_uri'ye kısa ömürlü bir code ve state döner.
  4. Client state'i kontrol eder (CSRF koruması), code + code_verifier ile /token ucundan access token ve refresh token alır.
  5. 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.read

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

  1. HTTP 401 ile 403 durum kodları arasındaki fark nedir?KolayAPI TasarımıBackend
  2. JWT nedir? Session tabanlı kimlik doğrulamadan farkı nedir?OrtaAPI TasarımıBackend
  3. Idempotency nedir? Hangi HTTP metotları idempotent'tir?OrtaAPI TasarımıBackend
  4. Rate limiting nedir? Token bucket ve sliding window algoritmalarını açıklayın.ZorAPI TasarımıBackend
  5. gRPC nedir? REST'ten farkı nedir ve ne zaman tercih edilir?OrtaAPI TasarımıBackend
  6. Webhook nedir? Güvenilir ve güvenli bir webhook sistemi nasıl tasarlanır?OrtaAPI TasarımıBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle