irdaweb Bilgi Teknolojileri
Telefon numaramız +90 541 209 02 05
E-posta adresimiz [email protected]
Konu 14 · Kimlik ve Erişim Yönetimi

Kimlik ve erişim yönetimi — kim olduğunuz ve neye erişebildiğiniz.

Her oturum açma ekranının arkasında iki ayrı soru çalışır: "Sen kimsin?" ve "Buna erişebilir misin?". İlki kimlik doğrulama, ikincisi yetkilendirmedir; karıştırıldıklarında en büyük güvenlik açıkları doğar. Bu sayfada OAuth 2.0 ve OpenID Connect'ten SSO ve federasyona, çok faktörlü doğrulamadan token yaşam döngüsüne ve RBAC/ABAC yetkilendirmesine kadar — uygulamanızın kimlik katmanını birlikte sadeleştirelim.

01 — Temeller

Kimlik doğrulama ve yetkilendirme farkı

Kimlik ve erişim yönetimi (IAM), bir sistemde kimin kim olduğunu ve neye erişebileceğini yöneten katmandır. İki kavram sürekli karıştırılır: kimlik doğrulama (authentication) "sen gerçekten iddia ettiğin kişi misin?" sorusunu yanıtlar; yetkilendirme (authorization) ise "bu işlemi yapmaya iznin var mı?" sorusunu. Doğru kimlik, yanlış yetki kontrolüyle birleştiğinde — örneğin giriş yapan bir kullanıcının başkasının verisine erişebilmesi — en sık görülen kritik açıklardan biri ortaya çıkar.

Katman · 01 AuthN

Kimlik doğrulama

Kullanıcının iddia ettiği kimliği kanıtlamasıdır: parola, tek seferlik kod, donanım anahtarı ya da biyometri. Sonuç ikilidir — kanıtlandı ya da kanıtlanmadı. Bundan sonraki her karar bu kimliğe dayanır.

Katman · 02 AuthZ

Yetkilendirme

Doğrulanmış kimliğin neyi yapabileceğine karar verir: hangi sayfayı görebilir, hangi kaydı düzenleyebilir, hangi API'yi çağırabilir. Kimlik bir kez kurulur; yetki ise her istekte yeniden sorgulanmalıdır.

Katman · 03 Audit

Hesap verebilirlik

Kim, ne zaman, neye erişti? Denetim kaydı (audit log) olmadan doğrulama ve yetkilendirme yarım kalır. Bir olayın izini sürebilmek, IAM'in görünmeyen ama vazgeçilmez üçüncü ayağıdır.

istek akışı — authN sonra authZ
# 1. kimlik doğrulama — "sen kimsin?"

POST /login          kimlik bilgisi + ikinci faktör
                     → kimlik kanıtlandı, oturum/token verildi

# 2. her istekte yetkilendirme — "iznin var mı?"

GET /invoices/42     Authorization: Bearer <token>
                     ↓ sunucu kontrol eder
                     kullanıcı 42 numaralı faturanın sahibi mi?
                     evet → 200 OK
                     hayır → 403 Forbidden  # kimlik geçerli ama yetki yok
401
Unauthorized — adı yanıltıcıdır, aslında kimlik doğrulanamadı demektir. Geçersiz ya da eksik kimlik bilgisi. Çözüm: oturum açmak veya geçerli bir token sunmak.
403
Forbidden — kimlik geçerli ama bu kaynağa yetki yok. Yeniden giriş yapmak çözmez; gereken yetki/rol verilmelidir. 401 ile 403'ü karıştırmak hem hata ayıklamayı hem güvenliği zorlaştırır.
En az ayrıcalık
Her kimlik yalnızca işini yapmaya yetecek izne sahip olmalıdır — fazlası değil. Geniş yetkiler, ele geçirilen bir hesabın verebileceği zararı büyütür. Oturum güvenliği ve CSRF için Web Uygulama Güvenliği.
Giriş yapmış olmak, her şeye erişebilmek demek değildir. En yaygın yetkilendirme açığı, kimliği doğrulanmış bir kullanıcının başka bir kullanıcının kaydına URL'deki numarayı değiştirerek erişebilmesidir (IDOR / broken object-level authorization). Yetki kontrolü istemcide değil, her istekte sunucuda yapılmalıdır.
02 — Protokoller

OAuth 2.0, OpenID Connect ve SAML

Bu üç standart sürekli birbirine karıştırılır çünkü çoğu zaman aynı oturum açma ekranının arkasında birlikte çalışırlar. Ama her biri farklı bir işi yapar: biri yetki devri, biri kimlik doğrulama, biri ise kurumsal dünyada federasyon için tasarlanmıştır.

Standart · 01 OAuth 2.0

Yetki devri (authorization)

Bir uygulamanın, parolanızı görmeden adınıza sınırlı bir işlem yapmasına izin verir — "bu uygulama takvimime erişebilsin" gibi. OAuth bir kimlik doğrulama protokolü değildir; tek başına "kullanıcı kim?" sorusunu güvenle yanıtlamaz.

Access token ile sınırlı erişim
Standart · 02 OIDC

OpenID Connect (authentication)

OAuth 2.0'ın üzerine inşa edilmiş kimlik katmanıdır. "Google ile giriş yap" akışlarının altında bu çalışır. Kullanıcının kimliğini doğrulanabilir bir ID token (JWT) ile taşır — "kullanıcı kim?" sorusunu OAuth'un eksik bıraktığı yerde yanıtlar.

ID token ile kimlik kanıtı
Standart · 03 SAML 2.0

Kurumsal federasyon

XML tabanlı, kurumsal SSO'nun yıllardır taşıyıcısı olan standart. Çalışanın şirket hesabıyla üçüncü taraf uygulamalara girmesini sağlar. Yeni projelerde yerini büyük ölçüde OIDC'ye bırakıyor; ama kurumsal entegrasyonlarda hâlâ çok yaygın.

XML assertion; kurumsal IdP odaklı
Akış · 01

Authorization Code + PKCE

Bugün önerilen varsayılan akış. Kullanıcı kimlik sağlayıcıda doğrulanır, uygulamaya kısa ömürlü bir code döner, uygulama bunu arka kanaldan token'la takas eder. PKCE eklentisi, code'un yolda çalınıp kullanılmasını engeller; mobil ve tek sayfa uygulamalarda zorunlu sayılır.

Akış · 02

Kaçınılması gereken akışlar

Implicit flow ve Resource Owner Password akışları artık önerilmez: token'ı tarayıcı geçmişinde ya da uygulamaya parola vererek riske atarlar. Token'lar her zaman TLS üzerinden taşınmalıdır; aktarım güvenliği için TLS, SSL ve Sertifikalar.

OAuth ile giriş yapmak ≠ OAuth ile kimlik doğrulamak. Yalnızca OAuth access token'ına bakıp "kullanıcı giriş yaptı" varsaymak klasik bir hatadır — access token kimliği değil, erişim iznini temsil eder. Kimlik için OIDC'nin ID token'ını doğrulayın: imzasını, aud (audience) ve iss (issuer) alanlarını mutlaka kontrol edin.
03 — SSO & federasyon

Tek oturum açma (SSO) ve kimlik federasyonu

Tek oturum açma (SSO), kullanıcının bir kez kimliğini doğrulayıp birden çok uygulamaya yeniden parola girmeden erişmesidir. Bunu mümkün kılan şey federasyondur: uygulamalar (service provider) kimlik doğrulamayı kendileri yapmaz, güvendikleri merkezî bir kimlik sağlayıcıya (identity provider, IdP) devreder.

Faydası açık: tek bir güçlü kimlik, daha az parola, merkezî erişim iptali. Ama riski de merkezîdir — IdP ele geçirilirse ona bağlı tüm uygulamalar etkilenir. Bu yüzden IdP'de güçlü MFA ve sıkı denetim kaydı vazgeçilmezdir.

SSO akışı — SP ↔ IdP
# kullanıcı bir uygulamaya (SP) girmek istiyor

1. GET app.sirket.com   oturum yok
                        → IdP'ye yönlendir

2. login.sirket.com     # kimlik sağlayıcı (IdP)
   kullanıcı zaten oturum açmış mı?
     evet → adım 3'e geç (parola sorulmaz)
     hayır → kimlik doğrula + MFA

3. IdP imzalı bir assertion / id_token üretir
                        → uygulamaya geri yönlendir

4. app.sirket.com       imzayı doğrular, oturumu açar
                        ✓ erişim verildi
IdP
Identity Provider — kimlik sağlayıcı
Kimliği doğrulayan ve güvenilir bir kimlik iddiası (token/assertion) üreten taraf. Okta, Entra ID (Azure AD), Google Workspace ya da kendi kurduğunuz Keycloak gibi. Tüm güven zincirinin çapasıdır.
SP
Service Provider — uygulama
Kimlik doğrulamayı IdP'ye devreden uygulama. Kendi parola deposu tutmaz; yalnızca IdP'nin imzalı iddiasını doğrular. Bu, parola yönetiminin tek bir güvenli noktada toplanmasını sağlar.
SCIM
Provisioning — hesap yaşam döngüsü
SSO yalnızca girişi çözer; hesabın açılması ve kapatılması ayrı bir iştir. SCIM gibi bir protokol, işten ayrılan bir çalışanın erişiminin tüm uygulamalardan otomatik kaldırılmasını sağlar — unutulan hesaplar en sessiz risktir.
04 — Çok faktörlü doğrulama

Çok faktörlü doğrulama (MFA) ve passwordless

Parola tek başına en zayıf halkadır: tahmin edilir, sızar, yeniden kullanılır. Çok faktörlü doğrulama, birbirinden bağımsız iki ayrı kanıt türünü birleştirir — bildiğiniz, sahip olduğunuz ve olduğunuz şey. Tek bir faktör çalınsa bile saldırgan ikinciyi sağlayamaz.

Doğrulama faktörleri
  1. Faktör 01

    Bildiğiniz şey

    Parola, PIN ya da güvenlik sorusu. En yaygın ama en kırılgan faktör; tek başına kullanıldığında kimlik avı ve sızıntılara açıktır.

    knowledge
  2. Faktör 02

    Sahip olduğunuz şey

    Telefondaki authenticator uygulaması (TOTP), donanım güvenlik anahtarı (FIDO2) ya da geçiş anahtarı (passkey). Fiziksel sahiplik gerektirdiği için uzaktan çalınması zordur.

    possession
  3. Faktör 03

    Olduğunuz şey

    Parmak izi, yüz ya da diğer biyometrik veriler. Genellikle cihazda yerel olarak doğrulanır; biyometrik veri cihazdan dışarı çıkmaz, yalnızca "doğrulandı" sinyali iletilir.

    inherence

Faktörler eşit güçte değildir. SMS ile gelen kodlar MFA'nın en zayıf biçimidir — SIM swap ve kimlik avı ile aşılabilir. Authenticator uygulamaları (TOTP) belirgin biçimde daha güvenlidir; FIDO2/passkey ise kimlik avına karşı dirençli olduğu için bugün altın standarttır.

Pratik · 01

Passkey'lere geçin

Geçiş anahtarları (passkey), parola ve ortak sırrı tamamen ortadan kaldırır; her site için cihazda saklanan açık/özel anahtar çiftine dayanır. Kimlik avıyla çalınamaz, çünkü doğrulama alan adına bağlıdır. Yeni projelerde birincil yöntem olarak değerlendirin.

Pratik · 02

Kurtarma yolunu zayıf bırakmayın

MFA ne kadar güçlü olursa olsun, "şifremi unuttum" akışı e-postaya düşüyorsa güvenlik o seviyeye iner. Kurtarma kodlarını tek kullanımlık üretin, e-posta hesabını da MFA ile koruyun; aksi halde en güçlü kapının yanına açık bir pencere bırakırsınız.

Pratik · 03

MFA yorgunluğuna karşı koyun

Saldırganlar art arda push bildirimi göndererek kullanıcıyı "onayla"maya zorlar (MFA fatigue). Sayı eşleştirmeli (number matching) onay ve hız sınırlama bunu kırar. Anormal giriş denemelerini görünür kılmak için Observability & Logging.

05 — Token & oturum

Token ve oturum yönetimi

Kimlik bir kez doğrulandıktan sonra, her istekte yeniden parola sormamak için bir oturum durumu taşınır. Bu iki temel yaklaşımla yapılır: sunucuda tutulan klasik session ya da istemcide taşınan imzalı token (JWT). İkisinin de güçlü ve zayıf yanları vardır; doğru seçim, iptali ne kadar hızlı yapmanız gerektiğine bağlıdır.

JWT — üç bölüm, nokta ile ayrılır
# header.payload.signature

eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMjMi....Tc8Hk3...

# payload çözüldüğünde (base64 — şifreli DEĞİL)
{
  "sub": "user_123",        # kimin
  "iss": "login.sirket.com", # kim üretti (issuer)
  "aud": "app.sirket.com",   # kimin için (audience)
  "exp": 1735689600,         # son kullanma — kısa olmalı
  "scope": "read:invoices"
}

# imza, üretenin özel anahtarıyla atılır
# payload'a asla sır koymayın — herkes okuyabilir
Access token
Kısa ömürlü (dakikalar). Her API isteğinde sunulur. Kısa olması bilinçlidir: çalınsa bile pencere dardır. Süresi dolunca refresh token ile sessizce yenilenir.
Refresh token
Uzun ömürlü ve değerlidir; yalnızca yeni access token almak için kullanılır. Güvenli, HttpOnly bir çerezde saklanmalı ve her kullanımda döndürülerek (rotation) çalınma tespit edilmelidir.
İptal
JWT'nin zayıf noktası: imza geçerli olduğu sürece sunucu onu tek tek geri alamaz. "Çıkış yap" gerçekten anlık olmalıysa, kısa exp ile bir kara liste/oturum kaydını birlikte kullanın.
JWT imzalıdır ama şifreli değildir. Payload'ı herkes base64 ile çözüp okuyabilir; imza yalnızca değiştirilemezliği garanti eder, gizliliği değil. Token'ı tarayıcıda localStorage'da tutmak XSS'e karşı açıktır — HttpOnly çerez tercih edin. XSS savunması için Web Uygulama Güvenliği.
06 — Yetkilendirme modelleri

Yetkilendirme modelleri: RBAC, ABAC ve en az ayrıcalık

Kimlik doğrulandıktan sonra "neye erişebilir?" sorusunu bir modelle yanıtlarsınız. İki yaygın yaklaşım vardır: izinleri rollere bağlayan RBAC ve özniteliklere bağlayan ABAC. Her ikisinin de üzerinde değişmez bir ilke durur: en az ayrıcalık.

Model · 01 RBAC

Role-Based Access Control

İzinler doğrudan kullanıcıya değil, rollere verilir; kullanıcı role atanır. "Editör", "Yönetici", "Görüntüleyici" gibi. Anlaşılması ve yönetilmesi kolaydır, çoğu uygulama için yeterlidir. Zayıflığı: çok ince ayrım gerektiğinde rol sayısı patlar (role explosion).

Model · 02 ABAC

Attribute-Based Access Control

Karar; kullanıcının, kaynağın ve bağlamın özniteliklerine göre verilir — "aynı departmandan, mesai saatinde, kurumsal ağdan" gibi. Çok esnektir ama kurallar karmaşıklaştıkça akıl yürütmesi ve test edilmesi zorlaşır. Genellikle RBAC'ın üzerine, ince ayar için eklenir.

İlke · 01

En az ayrıcalık

Varsayılan "reddet" olmalı; erişim yalnızca gerektiğinde ve gerektiği kadar açılmalı. Geniş "her şeye yetkili" hesaplar, ele geçirildiğinde verdikleri zararla orantılı bir risktir.

İlke · 02

Erişim incelemesi

Yetkiler zamanla birikir (privilege creep): rol değiştiren çalışan eski izinlerini taşır. Düzenli erişim incelemeleriyle "kimin neye, neden erişimi var?" periyodik olarak gözden geçirilmeli ve fazlalıklar geri alınmalıdır.

İlke · 03

Sunucuda zorla

Arayüzde bir butonu gizlemek yetki kontrolü değildir. Her yetki kararı sunucuda, kaynağa erişilen noktada yeniden uygulanmalı; istemciden gelen "ben yöneticiyim" iddiasına asla güvenilmemelidir.

Rol kontrolü, kayıt sahipliği kontrolü değildir. "Bu kullanıcı editör mü?" sorusu yeterli değildir; "bu editör bu kaydı düzenleyebilir mi?" de sorulmalıdır. Nesne düzeyinde sahiplik kontrolü atlanırsa, geçerli bir rolle başkasının verisi değiştirilebilir — en sık kaçırılan yetkilendirme açığı budur.
07 — Sık karıştırılanlar

Sık karıştırılan kimlik ve erişim kavramları

Authentication vs. Authorization

Authentication kim olduğunuzu doğrular ("sen sen misin?"). Authorization neye erişebileceğinize karar verir ("buna iznin var mı?"). Önce kimlik kurulur, sonra her istekte yetki sorgulanır. 401 birincinin, 403 ise ikincinin başarısızlığıdır.

OAuth 2.0 vs. OpenID Connect

OAuth 2.0 bir yetki devri protokolüdür; access token verir ama "kullanıcı kim?" sorusunu güvenle yanıtlamaz. OIDC ise OAuth üzerine kimlik katmanı ekler ve imzalı bir ID token ile kimliği taşır. Giriş için OIDC, kaynak erişimi için OAuth düşünün.

SSO vs. MFA

SSO kaç kez kimlik doğrulayacağınızı azaltır — bir kez girip çok uygulamaya erişirsiniz (kolaylık). MFA ise tek bir doğrulamayı güçlendirir — birden çok faktör ister (güvenlik). Birbirinin alternatifi değil, tamamlayıcısıdır; ikisi birlikte kullanılır.

Access token vs. Refresh token

Access token kısa ömürlüdür ve her API isteğinde sunulur. Refresh token uzun ömürlüdür ve yalnızca yeni access token almak için kullanılır. Access çalınırsa pencere dardır; refresh çok daha değerlidir ve sıkı korunmalı, döndürülmelidir.

RBAC vs. ABAC

RBAC izinleri rollere bağlar; anlaşılır ve çoğu durum için yeterlidir. ABAC izinleri kullanıcı/kaynak/bağlam özniteliklerine bağlar; çok esnektir ama yönetimi karmaşıktır. Pratikte sıklıkla RBAC tabana, ABAC ince ayara konur.

Session vs. JWT

Session durumu sunucuda tutulur; iptali anında olur ama ölçeklenirken paylaşımlı depo gerekir. JWT durumu imzalı olarak istemcide taşır; durumsuzdur ve ölçeklenir ama tek tek iptali zordur. Seçim, anlık iptale ne kadar ihtiyaç duyduğunuza bağlıdır.

Birinci el kaynaklar

OAuth, OpenID Connect, SAML, token biçimleri ve dijital kimlik kuralları için resmi kaynaklar.

Sıradaki adım

Kimlik katmanınıza birlikte bakalım.

Oturum açma akışınızı, token yaşam döngünüzü, MFA kurulumunuzu ve yetkilendirme modelinizi gözden geçirelim — uygulamanızın kimlik ve erişim katmanını birlikte sağlamlaştıralım.