Skip to main content
Yazılım Geliştirme

OAuth 2.0 ve OpenID Connect: Kimlik Doğrulama Rehberi

March 06, 2026 7 min read 12 views Raw
Also available in: en
OAuth 2.0 ve OpenID Connect kimlik doğrulama güvenlik görseli
Table of Contents

OAuth 2.0 ve OpenID Connect Nedir?

Modern web ve mobil uygulamalarda kimlik doğrulama ve yetkilendirme, kullanıcı deneyiminin ve güvenliğin temel taşlarından birini oluşturur. OAuth 2.0 ve OpenID Connect (OIDC), bu alanda en yaygın kullanılan iki protokoldür. Her iki protokol de farklı amaçlara hizmet eder ancak birlikte kullanıldığında güçlü ve güvenli bir kimlik doğrulama altyapısı sunar.

OAuth 2.0, bir yetkilendirme (authorization) protokolüdür. Kullanıcının kimlik bilgilerini paylaşmadan üçüncü parti uygulamalara sınırlı erişim vermesini sağlar. OpenID Connect ise OAuth 2.0 üzerine inşa edilmiş bir kimlik doğrulama (authentication) katmanıdır. Kullanıcının kim olduğunu doğrulamak için kullanılır.

Bu rehberde, her iki protokolün çalışma prensiplerini, flow türlerini, token yönetimini ve güvenli implementasyon tekniklerini detaylı olarak inceleyeceğiz.

OAuth 2.0 Temel Kavramları

OAuth 2.0 ekosistemini anlamak için öncelikle dört temel rolü kavramak gerekir. Bu roller, protokolün işleyişini belirleyen yapı taşlarıdır.

  • Resource Owner (Kaynak Sahibi): Korunan kaynaklara erişim izni verebilen kullanıcıdır. Genellikle son kullanıcıyı temsil eder.
  • Client (İstemci): Kaynak sahibi adına korunan kaynaklara erişmek isteyen uygulamadır. Web, mobil veya masaüstü uygulaması olabilir.
  • Authorization Server (Yetkilendirme Sunucusu): Kullanıcıyı doğrulayan ve erişim tokenları veren sunucudur. Keycloak, Auth0 veya IdentityServer gibi çözümler bu rolü üstlenir.
  • Resource Server (Kaynak Sunucusu): Korunan kaynakları barındıran API sunucusudur. Erişim tokenlarını doğrulayarak istekleri kabul eder veya reddeder.

OAuth 2.0 Grant Türleri

OAuth 2.0, farklı senaryolar için farklı grant (yetkilendirme) türleri tanımlar. Her grant türü, belirli bir kullanım senaryosuna göre optimize edilmiştir.

  1. Authorization Code Grant: En güvenli ve en yaygın kullanılan grant türüdür. Sunucu taraflı uygulamalar için idealdir. Kullanıcı, yetkilendirme sunucusuna yönlendirilir, onay verdikten sonra bir authorization code döner ve bu kod sunucu tarafında access token ile değiştirilir.
  2. Authorization Code Grant with PKCE: Tek sayfalı uygulamalar (SPA) ve mobil uygulamalar için tasarlanmıştır. Proof Key for Code Exchange mekanizması, authorization code'un çalınmasını önler.
  3. Client Credentials Grant: Makine-makine iletişimi için kullanılır. Kullanıcı etkileşimi yoktur; uygulama kendi kimlik bilgileriyle doğrudan token alır.
  4. Device Authorization Grant: Sınırlı giriş kapasitesine sahip cihazlar için tasarlanmıştır. Akıllı TV'ler ve IoT cihazları bu grant türünü kullanır.
Implicit Grant ve Resource Owner Password Credentials Grant türleri, güvenlik zafiyetleri nedeniyle artık önerilmemektedir. Yeni uygulamalarda bu grant türlerinden kaçınılmalıdır.

Authorization Code Flow Detaylı İnceleme

Authorization Code Flow, modern uygulamaların büyük çoğunluğunda tercih edilen yetkilendirme akışıdır. Bu akışın adım adım nasıl çalıştığını inceleyelim.

İlk adımda istemci uygulama, kullanıcıyı yetkilendirme sunucusunun authorization endpoint'ine yönlendirir. Bu yönlendirme isteğinde client_id, redirect_uri, response_type, scope ve state parametreleri bulunur. State parametresi, CSRF saldırılarını önlemek için kritik öneme sahiptir.

Kullanıcı, yetkilendirme sunucusunda kimlik bilgilerini girer ve istenen izinleri onaylar. Başarılı doğrulamanın ardından yetkilendirme sunucusu, kullanıcıyı belirtilen redirect_uri adresine bir authorization code ile birlikte geri yönlendirir.

Son adımda istemci uygulama, aldığı authorization code'u yetkilendirme sunucusunun token endpoint'ine gönderir. Bu isteğe client_secret de dahil edilir. Yetkilendirme sunucusu, kodu doğrular ve bir access token ile refresh token döner.

PKCE Mekanizması

PKCE (Proof Key for Code Exchange), authorization code akışına ek bir güvenlik katmanı ekler. İstemci, rastgele bir code_verifier oluşturur ve bunun SHA-256 hash değerini code_challenge olarak yetkilendirme isteğine ekler. Token değişimi sırasında orijinal code_verifier gönderilir ve sunucu tarafında doğrulanır. Bu mekanizma, authorization code'un ele geçirilmesi durumunda bile token alınmasını engeller.

OpenID Connect Katmanı

OpenID Connect, OAuth 2.0 üzerine inşa edilmiş bir kimlik doğrulama protokolüdür. OAuth 2.0 yalnızca yetkilendirme sağlarken, OIDC kullanıcının kimliğini doğrulama yeteneği ekler.

OIDC'nin en önemli katkısı ID Token kavramıdır. ID Token, JWT (JSON Web Token) formatında bir token olup kullanıcı hakkında bilgiler içerir. Bu bilgilere claim adı verilir.

  • sub: Kullanıcının benzersiz tanımlayıcısı
  • iss: Token'ı veren yetkilendirme sunucusu
  • aud: Token'ın hedef kitlesi (client_id)
  • exp: Token'ın geçerlilik süresi
  • iat: Token'ın oluşturulma zamanı
  • nonce: Replay saldırılarını önlemek için kullanılan değer
  • name, email, picture: Kullanıcının profil bilgileri

OIDC Discovery ve Metadata

OpenID Connect, otomatik yapılandırma için bir discovery mekanizması sunar. Yetkilendirme sunucusunun .well-known/openid-configuration endpoint'i, tüm gerekli bilgileri içerir. Bu endpoint üzerinden authorization endpoint, token endpoint, userinfo endpoint, desteklenen scope'lar ve imzalama anahtarları gibi bilgilere ulaşılabilir.

Bu mekanizma, istemci uygulamaların manuel yapılandırma ihtiyacını ortadan kaldırır ve dinamik keşif yoluyla entegrasyon sürecini kolaylaştırır.

Token Yönetimi ve Güvenliği

Token yönetimi, OAuth 2.0 ve OIDC implementasyonlarında en kritik konulardan biridir. Doğru token yönetimi, hem kullanıcı deneyimini hem de güvenliği doğrudan etkiler.

Access Token

Access token, korunan kaynaklara erişim için kullanılır. Kısa ömürlü olmalıdır; genellikle 5-60 dakika arasında bir süre önerilir. JWT formatında olabilir ve bu durumda kaynak sunucu, token'ı yetkilendirme sunucusuna danışmadan doğrulayabilir. Opaque token kullanıldığında ise introspection endpoint üzerinden doğrulama yapılır.

Refresh Token

Refresh token, access token süresi dolduğunda yeni bir access token almak için kullanılır. Uzun ömürlüdür ancak güvenli bir şekilde saklanmalıdır. Refresh token rotation uygulaması şiddetle tavsiye edilir. Bu mekanizmada her refresh token kullanımında yeni bir refresh token verilir ve eski token geçersiz kılınır.

Token Saklama Stratejileri

Token'ların güvenli saklanması, uygulama türüne göre farklılık gösterir. Sunucu taraflı uygulamalarda token'lar sunucu oturumunda veya güvenli bir veritabanında saklanmalıdır. Tarayıcı tabanlı uygulamalarda httpOnly ve secure flag'lere sahip çerezler tercih edilmelidir. localStorage veya sessionStorage kullanımından kaçınılmalıdır çünkü XSS saldırılarına karşı savunmasızdırlar.

Mobil uygulamalarda ise platform tarafından sağlanan güvenli depolama mekanizmaları kullanılmalıdır. iOS'ta Keychain, Android'de Encrypted SharedPreferences veya KeyStore bu amaçla kullanılabilir.

Güvenlik En İyi Uygulamaları

OAuth 2.0 ve OpenID Connect implementasyonlarında güvenliği sağlamak için aşağıdaki en iyi uygulamalar takip edilmelidir.

  • HTTPS zorunluluğu: Tüm OAuth 2.0 iletişimi HTTPS üzerinden gerçekleştirilmelidir. HTTP üzerinden token transferi kesinlikle yapılmamalıdır.
  • State parametresi kullanımı: CSRF saldırılarını önlemek için her yetkilendirme isteğinde benzersiz bir state parametresi gönderilmeli ve dönüşte doğrulanmalıdır.
  • PKCE kullanımı: Tüm public client'larda PKCE zorunlu olmalıdır. Confidential client'larda da ek güvenlik katmanı olarak kullanılması önerilir.
  • Token süre sınırlaması: Access token'lar mümkün olduğunca kısa ömürlü tutulmalıdır. Uzun süreli erişim için refresh token mekanizması kullanılmalıdır.
  • Scope minimizasyonu: Uygulamalar yalnızca ihtiyaç duydukları minimum scope'ları talep etmelidir. Gereksiz izin istekleri güvenlik riskini artırır.
  • Redirect URI doğrulaması: Yetkilendirme sunucusu, redirect URI'lerini kesin eşleşme ile doğrulamalıdır. Wildcard kullanımından kaçınılmalıdır.
  • Token iptal mekanizması: Kullanıcı çıkış yaptığında veya erişim iptal edildiğinde token'lar mutlaka revoke edilmelidir.

Yaygın Hatalar ve Çözümleri

OAuth 2.0 implementasyonlarında sıkça karşılaşılan hatalar ve bunların çözümleri geliştiriciler için kritik öneme sahiptir.

En yaygın hatalardan biri, access token'ları URL parametresi olarak göndermektir. Bu yaklaşım, token'ların sunucu loglarında ve tarayıcı geçmişinde görünmesine neden olur. Token'lar her zaman Authorization header'ında Bearer şeması ile gönderilmelidir.

Bir diğer yaygın hata, token doğrulamasının yalnızca imza kontrolü ile sınırlı tutulmasıdır. Token doğrulamada imzanın yanı sıra issuer, audience, expiration ve scope kontrolleri de yapılmalıdır.

Client secret'ların istemci tarafı kodda veya versiyon kontrol sistemlerinde saklanması da ciddi bir güvenlik açığıdır. Secret'lar ortam değişkenleri veya güvenli vault çözümleri aracılığıyla yönetilmelidir.

Popüler Kimlik Sağlayıcıları

OAuth 2.0 ve OpenID Connect implementasyonu için çeşitli hazır çözümler mevcuttur. Bu çözümler, sıfırdan implementasyon yapma ihtiyacını ortadan kaldırır.

  1. Keycloak: Red Hat tarafından desteklenen açık kaynaklı bir kimlik ve erişim yönetimi çözümüdür. Zengin özellik seti ve geniş topluluk desteği sunar.
  2. Auth0: Bulut tabanlı bir kimlik platformudur. Hızlı entegrasyon ve kapsamlı SDK desteği ile öne çıkar.
  3. Azure AD / Microsoft Entra ID: Microsoft ekosistemi ile derin entegrasyon sağlar. Kurumsal uygulamalar için güçlü bir tercih olarak değerlendirilir.
  4. Google Identity Platform: Google hesaplarıyla kimlik doğrulama ve yetkilendirme sunar. Firebase Auth ile birlikte kullanılabilir.
  5. Duende IdentityServer: .NET ekosistemi için özel olarak tasarlanmış bir OpenID Connect ve OAuth 2.0 framework'üdür.

Sonuç ve Öneriler

OAuth 2.0 ve OpenID Connect, modern uygulamalarda kimlik doğrulama ve yetkilendirme için standart haline gelmiş protokollerdir. Doğru implementasyon, kullanıcı verilerinin güvenliğini sağlarken sorunsuz bir kullanıcı deneyimi sunar.

Yeni bir proje başlatırken Authorization Code Flow with PKCE kullanımını varsayılan tercih olarak belirleyin. Token yönetiminde kısa ömürlü access token ve refresh token rotation mekanizmasını benimseyin. Güvenlik kontrollerini uygulama katmanında eksiksiz olarak implemente edin ve düzenli güvenlik denetimleri gerçekleştirin.

Hazır kimlik sağlayıcıları kullanarak geliştirme sürecini hızlandırabilir ve kanıtlanmış güvenlik pratiklerinden faydalanabilirsiniz. Protokollerin sürekli geliştiğini göz önünde bulundurarak güncel standartları ve en iyi uygulamaları takip etmeyi ihmal etmeyin.

Share this post