OAuth 2.0 temel olarak yetkilendirmeye odaklanırken OpenID Connect kullanıcı kimlik doğrulamasını standartlaştırır. OIDC akışında en önemli bileşenlerden biri ID Token’dır. ID Token çoğunlukla JWT biçimindedir ve kullanıcı, issuer, audience, kimlik doğrulama zamanı ve token geçerliliği gibi bilgileri taşıyabilir.
Ancak yalnızca bir ID Token almak güvenli giriş yapıldığı anlamına gelmez. Token imzasının doğrulanması, issuer ve audience kontrollerinin yapılması, nonce değerinin kontrol edilmesi, redirect URI adreslerinin sınırlandırılması ve OAuth akışının güvenli yapılandırılması gerekir.
Bu nedenle OpenID Connect güvenliği nedir konusu yalnızca SSO özelliğini aktif etmekten ibaret değildir. OpenID Provider, istemci uygulaması, tarayıcı, ID Token, Access Token ve kullanıcı oturumunun tamamının güven zinciri içerisinde değerlendirilmesi gerekir.
OpenID Connect Güvenliği Nedir? Hızlı Bakış
| Kontrol | Temel Amaç |
|---|---|
| ID Token İmzası | Token’ın güvenilir OpenID Provider tarafından üretildiğini doğrular. |
| Issuer Kontrolü | ID Token’ın beklenen kimlik sağlayıcısından geldiğini kontrol eder. |
| Audience Kontrolü | ID Token’ın mevcut istemci uygulaması için üretildiğini doğrular. |
| Nonce | ID Token replay ve istek eşleştirme risklerini azaltmaya yardımcı olur. |
| PKCE | Authorization Code’un ele geçirilerek kötüye kullanılmasını zorlaştırır. |
| Redirect URI | Authorization cevabının saldırganın adresine gönderilmesini önlemeye yardımcı olur. |
| Expiration | Süresi dolmuş ID Token kullanımını engeller. |
| Discovery | Issuer, authorization endpoint, token endpoint ve JWKS bilgilerinin doğru sağlayıcıdan alınmasını sağlar. |
OpenID Connect Güvenliği Nedir ve OAuth 2.0’dan Farkı Nedir?
OpenID Connect güvenliği nedir sorusunu doğru anlamak için önce OAuth 2.0 ile OIDC arasındaki farkı bilmek gerekir.
OAuth 2.0 temel olarak bir uygulamanın belirli kaynaklara sınırlı erişim kazanmasını sağlayan yetkilendirme çerçevesidir. Örneğin bir uygulamaya kullanıcının dosyalarını okuma izni verilmesi OAuth kapsamına girebilir.
OpenID Connect ise OAuth 2.0 akışının üzerine kimlik doğrulama katmanı ekler. İstemci authorization request içinde openid scope değerini kullanarak OIDC akışı başlatabilir.
Başarılı kimlik doğrulama sonrasında istemci bir ID Token alabilir. Bu token, kullanıcının OpenID Provider tarafından doğrulandığına ilişkin claim değerlerini içerir.
Buradaki önemli ayrım şudur:
- ID Token: Kullanıcının kimlik doğrulama bilgisini istemciye taşır.
- Access Token: Bir API veya korunan kaynağa erişmek için kullanılır.
- Refresh Token: Uygun akışlarda yeni Access Token elde etmek için kullanılabilir.
ID Token ile Access Token’ın birbirine karıştırılması ciddi güvenlik problemlerine yol açabilir.
OpenID Connect Güvenliği Nedir? 12 Kritik Güvenlik Önlemi
1. ID Token İmzasını Mutlaka Doğrulayın
OIDC akışında alınan ID Token içeriğini yalnızca Base64URL decode etmek güvenli doğrulama değildir. Token içindeki kullanıcı kimliğine veya diğer claim değerlerine güvenmeden önce kriptografik imza doğrulanmalıdır.
İstemci, OpenID Provider tarafından yayımlanan güvenilir public key bilgisini kullanarak ID Token imzasını doğrulamalıdır.
İmza doğrulaması başarısızsa token içerisindeki sub, email, role veya diğer claim değerleri kullanılmamalıdır.
OpenID Connect güvenliği nedir yaklaşımının temel kurallarından biri token’ı yalnızca okumak değil, doğrulamaktır.
2. Issuer Değerini Tam Olarak Kontrol Edin
ID Token içerisindeki iss claim değeri token’ı hangi OpenID Provider’ın oluşturduğunu belirtir.
İstemci yalnızca önceden güvendiği issuer değerlerini kabul etmelidir. Örneğin uygulamanız belirli bir kurumsal kimlik sağlayıcısından token bekliyorsa farklı issuer tarafından oluşturulmuş geçerli bir JWT kabul edilmemelidir.
Issuer karşılaştırması gevşek domain kontrolü yerine sağlayıcının tanımladığı kesin değer üzerinden yapılmalıdır.
Bu kontrol sahte veya yanlış kimlik sağlayıcısından gelen tokenların güvenilir oturum oluşturmasını önlemeye yardımcı olur.
3. Audience Değerini Doğrulayın
aud claim değeri ID Token’ın hangi istemci için oluşturulduğunu belirtir.
OpenID Provider tarafından başka bir uygulama için üretilmiş geçerli ID Token’ın sizin uygulamanız tarafından kabul edilmesi güvenlik problemi oluşturabilir.
Bu nedenle ID Token içerisindeki audience değerinin uygulamanın gerçek Client ID değeriyle eşleştiği doğrulanmalıdır.
OpenID Connect güvenliği nedir denildiğinde issuer ve audience kontrolleri birlikte değerlendirilmelidir.
4. Expiration ve Zaman Claim’lerini Kontrol Edin
ID Token içerisindeki exp claim’i token’ın ne zamana kadar geçerli olduğunu belirtir.
Süresi dolmuş ID Token kabul edilmemelidir. Uygulamaya göre iat yani issued at ve auth_time gibi diğer zaman bilgileri de değerlendirilmelidir.
Özellikle hassas işlemlerde çok eski bir kullanıcı doğrulamasına dayanmak yerine yeniden kimlik doğrulama gerekebilir.
Sunucular arasındaki küçük saat farkları için sınırlı tolerans kullanılabilir ancak gereğinden fazla clock skew tanımlamak token geçerlilik süresini fiilen uzatabilir.
5. Nonce Değerini Kullanın ve Doğrulayın
Nonce, istemcinin authorization isteği sırasında oluşturduğu ve daha sonra ID Token ile ilişkilendirebildiği rastgele bir değerdir.
İstemci gönderdiği nonce değerini güvenli biçimde saklamalı ve dönen ID Token içerisindeki nonce ile karşılaştırmalıdır.
Eşleşme bulunmazsa token kabul edilmemelidir.
Nonce özellikle bir ID Token’ın farklı istek içerisinde yeniden kullanılmasına ilişkin replay risklerini azaltmaya yardımcı olur.
Her authentication isteğinde tahmin edilemez ve yeterince rastgele yeni nonce oluşturmak OpenID Connect güvenliği nedir stratejisinin önemli parçalarındandır.
6. State Değeri ile Authorization İsteğini Koruyun
OAuth ve OpenID Connect tabanlı tarayıcı akışlarında state değeri authorization isteği ile callback arasında bağlantı kurulmasına yardımcı olur.
State değeri tahmin edilemez biçimde üretilmeli, kullanıcı oturumuyla ilişkilendirilmeli ve callback geldiğinde doğrulanmalıdır.
Doğru kullanıldığında state, özellikle Cross-Site Request Forgery benzeri authorization flow saldırılarının azaltılmasına yardımcı olabilir.
State ile nonce aynı kavram değildir. İki değer farklı güvenlik amaçlarına hizmet eder ve protokol/uygulama gereksinimine göre birlikte kullanılabilir.
7. Authorization Code Flow ile PKCE Kullanın
Modern OIDC uygulamalarında Authorization Code Flow ve PKCE birlikte güçlü bir temel oluşturur.
PKCE yani Proof Key for Code Exchange, istemcinin authorization code’u token ile değiştirebilmesi için başlangıçta oluşturulan gizli bir doğrulama değerini kanıtlamasını sağlar.
Authorization code saldırgan tarafından ele geçirilse bile doğru code_verifier bulunmadığında token elde edilmesi zorlaşır.
Özellikle mobil uygulamalar, SPA’lar ve client secret bilgisini güvenli biçimde saklayamayan public client yapıları için bu kontrol çok önemlidir.
8. Redirect URI Adreslerini Tam Eşleşmeyle Sınırlandırın
OIDC authorization cevabı istemci tarafından kayıt edilmiş redirect URI adresine gönderilir.
Redirect URI doğrulamasının gevşek yapılması saldırganın authorization code veya başka hassas verileri kendi kontrol ettiği adrese yönlendirmesine yol açabilir.
Production istemcilerinde yalnızca gerçekten kullanılan callback adreslerini kaydedin.
Örneğin tüm alt domainleri kabul eden geniş wildcard kuralları yerine:
https://app.example.com/callback
gibi açık ve belirli URI kullanılması saldırı yüzeyini azaltır.
9. ID Token ile Access Token’ı Birbirine Karıştırmayın
Bu, OpenID Connect güvenliği nedir konusunda en sık yapılan hatalardan biridir.
ID Token’ın hedefi istemci uygulamasıdır ve kimlik doğrulama olayına ilişkin bilgi taşır. Access Token ise korunan API veya resource server tarafından kullanılmak üzere oluşturulur.
Bir API’nin yalnızca ID Token gördüğü için kullanıcıya erişim vermesi doğru güvenlik modeli değildir.
Benzer şekilde istemci uygulaması API erişim yetkisini yalnızca ID Token içerisindeki kullanıcı bilgisine bakarak oluşturmamalıdır.
Her token yalnızca üretildiği amaç doğrultusunda kullanılmalıdır.
10. Discovery ve JWKS Bilgilerini Güvenilir Issuer’a Bağlayın
OpenID Connect Discovery sayesinde istemci authorization endpoint, token endpoint, issuer ve public key bilgileri gibi yapılandırmaları otomatik olarak öğrenebilir.
Bu özellik doğru kullanıldığında yönetimi kolaylaştırır ancak discovery sonucunun beklenen issuer ile eşleşmesi gerekir.
JWKS yani JSON Web Key Set adresinden alınan public key değerleri de yalnızca güvenilir sağlayıcıya ait olmalıdır.
Saldırgan tarafından kontrol edilen rastgele discovery veya JWKS URL’sinin kullanılmasına izin verilmesi güven zincirini bozabilir.
Production uygulamasında güvenilecek issuer listesi açık biçimde belirlenmelidir.
11. UserInfo Endpoint’ten Gelen Veriye Körü Körüne Güvenmeyin
OpenID Connect, uygun Access Token kullanıldığında UserInfo endpoint üzerinden kullanıcıya ilişkin ek claim bilgilerinin alınmasına izin verebilir.
UserInfo cevabındaki kullanıcının, doğrulanan ID Token’daki kullanıcıyla aynı olduğunu kontrol etmek önemlidir.
Özellikle sub yani subject identifier, kullanıcının issuer içerisindeki temel kimlik değerlerinden biridir.
Uygulama kullanıcı eşleştirmesini yalnızca değişebilen e-posta adresi gibi claim değerlerine bağlamak yerine issuer ve subject gibi daha güvenilir kimlik tanımlayıcılarını dikkate almalıdır.
12. OIDC Oturumlarını, Tokenları ve Hataları Sürekli İzleyin
Güvenli OpenID Connect kurulumu yalnızca giriş işlemi başarılı olduğunda bitmez.
Şunlar merkezi olarak izlenebilir:
- başarısız ID Token imza doğrulamaları,
- issuer uyuşmazlıkları,
- audience hataları,
- nonce eşleşme problemleri,
- olağandışı authorization istekleri,
- çok sayıda başarısız callback,
- beklenmeyen redirect URI denemeleri,
- token yenileme anomalileri.
Ancak gerçek ID Token, Access Token veya Refresh Token değerlerini uygulama loglarına düz metin yazmaktan kaçının.
Bu sayede OpenID Connect güvenliği nedir yaklaşımı yalnızca yapılandırma kontrolü değil, sürekli izlenen kimlik güvenliği operasyonuna dönüşür.
OpenID Connect Güvenliği Nedir? Kritik ID Token Claim’leri
| Claim | Anlamı | Güvenlik Kontrolü |
|---|---|---|
| iss | Issuer | Beklenen OpenID Provider ile tam eşleşmeli. |
| sub | Subject | Kullanıcının issuer içerisindeki kimliğini tanımlar. |
| aud | Audience | İstemcinin Client ID değeriyle uyumlu olmalı. |
| exp | Expiration | Süresi dolmuş token reddedilmeli. |
| iat | Issued At | Token’ın oluşturulma zamanını belirtir. |
| auth_time | Authentication Time | Kullanıcının ne zaman doğrulandığını gösterebilir. |
| nonce | Nonce | Authorization isteğinde gönderilen değerle eşleştirilmeli. |
OpenID Connect Güvenliği Nedir? ID Token ve Access Token Farkı
| Özellik | ID Token | Access Token |
|---|---|---|
| Temel amaç | Kullanıcı kimlik doğrulama bilgisini istemciye iletmek | API veya korunan kaynağa erişmek |
| Hedef | Client / Relying Party | Resource Server / API |
| Kullanım | Kullanıcı oturumu ve kimlik bilgisi | Yetkilendirilmiş API çağrısı |
| Birbirinin yerine geçer mi? | Hayır. Token türleri üretildikleri amaç için kullanılmalıdır. | |
OpenID Connect Güvenliği İçin Pratik Kontrol Listesi
- ID Token signature doğrulamasını zorunlu tutun.
- Issuer değerini doğrulayın.
- Audience değerinin gerçek Client ID ile eşleştiğini kontrol edin.
- Expiration ve gerekli zaman claim’lerini kontrol edin.
- Her giriş isteğinde güvenli nonce kullanın.
- State değerini kullanıcı oturumuyla ilişkilendirin.
- Authorization Code + PKCE yaklaşımını kullanın.
- Redirect URI listesini dar tutun.
- ID Token ile Access Token’ı birbirinden ayırın.
- Discovery ve JWKS kaynağını güvenilir issuer’a bağlayın.
- UserInfo subject değerini doğrulayın.
- OIDC güvenlik hatalarını merkezi olarak izleyin.
OpenID Connect Güvenliği Nedir? Sık Yapılan 10 Hata
- ID Token’ı yalnızca decode edip signature kontrolü yapmamak
- Issuer doğrulamasını atlamak
- Audience kontrolü yapmamak
- Nonce değerini kullanmamak
- State değerini sabit veya tahmin edilebilir oluşturmak
- Redirect URI için geniş wildcard kullanmak
- ID Token’ı API Access Token olarak kullanmak
- Discovery sonucundaki issuer değerini doğrulamamak
- Token değerlerini loglara yazmak
- Kullanıcıyı yalnızca değişebilir e-posta claim’i üzerinden tanımlamak
OpenID Connect Güvenliği Nedir? Sık Sorulan Sorular
OpenID Connect güvenliği nedir?
OpenID Connect güvenliği nedir sorusuna; OIDC tabanlı kullanıcı girişlerinde ID Token, issuer, audience, nonce, redirect URI, PKCE ve kullanıcı oturumlarının doğru şekilde doğrulanması ve korunması şeklinde cevap verilebilir.
OpenID Connect ile OAuth 2.0 aynı mı?
Hayır. OAuth 2.0 temel olarak yetkilendirme çerçevesidir. OpenID Connect, OAuth 2.0 üzerine kullanıcı kimlik doğrulama katmanı ekler.
ID Token nedir?
ID Token, OpenID Provider tarafından istemciye verilen ve kullanıcı kimlik doğrulama olayına ilişkin claim değerleri taşıyan token’dır.
ID Token Access Token yerine kullanılabilir mi?
Hayır. ID Token istemciye kimlik bilgisi sağlamak, Access Token ise korunan API’ye erişmek için tasarlanmıştır.
OIDC’de nonce neden kullanılır?
Nonce, istemcinin başlattığı authentication isteği ile aldığı ID Token arasında ilişki kurulmasına ve token replay riskinin azaltılmasına yardımcı olur.
OIDC’de PKCE gerekli mi?
Modern Authorization Code tabanlı akışlarda PKCE güçlü bir güvenlik kontrolüdür ve özellikle public client yapılarında authorization code ele geçirilmesi riskini azaltır.
OIDC tokenları JWT midir?
ID Token bir JWT’dir. Ancak OAuth kapsamında kullanılan Access Token’ın formatı sisteme göre değişebilir ve her Access Token’ın JWT olması zorunlu değildir.
OIDC ile SSO yapılabilir mi?
Evet. OpenID Connect, merkezi kimlik sağlayıcısı üzerinden farklı istemci uygulamalarında Single Sign-On mimarilerinin kurulmasında yaygın olarak kullanılabilir.
OpenID Connect, OAuth 2.0 ve JWT Arasındaki Fark
OpenID Connect güvenliği nedir konusunu anlamanın en kolay yollarından biri üç kavramı birbirinden ayırmaktır:
- OAuth 2.0: Yetkilendirme çerçevesidir.
- OpenID Connect: OAuth 2.0 üzerine kimlik doğrulama katmanı ekler.
- JWT: Claim bilgilerinin taşınabildiği token formatıdır.
Bu üç teknoloji sık sık aynı sistem içerisinde kullanılsa da birbirinin yerine geçen kavramlar değildir.
İlgili İçerikler
OAuth 2.0 Güvenliği Nedir? 10 Kritik Önlem
JWT Güvenliği Nedir? 12 Kritik Önlem
Workload Identity Federation Nedir?
Resmî ve Güvenilir Kaynaklar
OpenID Foundation — OpenID Connect Core 1.0
OpenID Foundation — OpenID Connect Discovery 1.0
Sonuç: OpenID Connect Güvenliği Nedir?
OpenID Connect güvenliği nedir sorusuna yalnızca “Google veya Microsoft ile giriş yapmak” şeklinde cevap vermek yeterli değildir. Güvenli OIDC mimarisi, kullanıcı kimliğinin gerçekten beklenen OpenID Provider tarafından doğrulandığından emin olmak için çok sayıda kontrolün birlikte uygulanmasını gerektirir.
ID Token signature doğrulaması, issuer ve audience kontrolleri, expiration yönetimi, nonce ve state kullanımı, PKCE, exact redirect URI doğrulaması ve güvenilir Discovery/JWKS kaynakları bu yapının temel güvenlik katmanlarını oluşturur.
Ayrıca ID Token ile Access Token’ın birbirine karıştırılmaması ve kullanıcı kimliğinin doğru issuer-subject bağlamında yönetilmesi gerekir. Bu kontroller birlikte uygulandığında OpenID Connect güvenliği nedir konusu basit bir SSO ayarından çıkarak güçlü ve sürekli doğrulanan bir kimlik güvenliği mimarisine dönüşür.
