İletişim

Kimlik Doğrulama (Authentication) Nedir?

Kısa tanım

Kimlik doğrulama (authentication), bir sisteme erişmek isteyen kullanıcının, cihazın ya da servisin gerçekten iddia ettiği kişi veya varlık olduğunu kanıtlama sürecidir. Parola, tek kullanımlık kod, passkey ya da biyometrik doğrulama gibi kanıtlarla yapılır. "Sen kimsin?" sorusunu yanıtlar; doğrulanan kimliğin neleri yapabileceğine ise yetkilendirme karar verir.

Diğer adları: Authentication, AuthN, Kullanıcı doğrulama

Kullanıcının kimlik bilgilerinin kayıtlı özetle karşılaştırılarak doğrulandığını, başarıda oturum açıldığını, hatada 401 döndüğünü gösteren akış

Üç tür kanıt

Kimlik doğrulamada kullanılan kanıtlar geleneksel olarak üç gruba ayrılır: bilinen bir şey (parola, PIN), sahip olunan bir şey (telefon, donanım anahtarı, authenticator uygulaması) ve kişinin kendisine ait bir özellik (parmak izi, yüz tanıma). Yalnızca tek bir faktöre dayanan giriş, o faktör ele geçirildiği anda tamamen savunmasız kalır. Bu yüzden yönetim panelleri, finansal işlemler ve müşteri verisi barındıran sistemlerde en az iki farklı türden kanıt istenir.

MFA: çok faktörlü doğrulama

Çok faktörlü kimlik doğrulama (MFA; iki faktör kullanıldığında 2FA), parolaya ek olarak farklı türden bir kanıt ister. Böylece sızan bir parola tek başına hesabı açmaya yetmez. Ancak yöntemlerin dayanıklılığı aynı değildir: SMS ile gelen kodlar SIM kartı dolandırıcılığına ve oltalamaya açıktır; TOTP üreten authenticator uygulamaları daha sağlamdır. WebAuthn/FIDO2 tabanlı passkey'ler ve donanım anahtarları ise alan adına bağlı çalıştıkları için, sahte bir giriş sayfasına kod kaptırma riskini büyük ölçüde ortadan kaldırır.

Parolalar nasıl saklanmalı?

Parolalar veritabanında asla düz metin olarak ya da geri çözülebilir bir şifrelemeyle tutulmaz. Doğru yöntem, her kullanıcıya özgü rastgele bir salt ile birlikte, kasıtlı olarak yavaş ve bellek tüketen bir parola özetleme (hashing) algoritması kullanmaktır. Güncel tercih Argon2id'dir (RFC 9106); bcrypt ve scrypt da yaygın ve kabul gören seçeneklerdir. MD5, SHA-1 ya da tek geçişli SHA-256 gibi hızlı özet fonksiyonları parola saklamaya uygun değildir: veritabanı sızarsa saldırgana çok yüksek hızda tahmin deneme imkânı verir.

// Node.js, argon2 paketi ile
import argon2 from "argon2";

// Kayıt sırasında: salt otomatik üretilir ve özetin içine yazılır
const hash = await argon2.hash(parola, { type: argon2.argon2id });

// Giriş sırasında
const dogruMu = await argon2.verify(hash, girilenParola);

Kullanıcı tarafında en büyük farkı uzun ve her sitede farklı parolalar yaratır; bunun için bir parola yöneticisi ya da Doruva'nın güçlü şifre oluşturucu aracı kullanılabilir.

Giriş sonrası: oturum mu, token mı?

Kullanıcı bir kez doğrulandıktan sonra her istekte parolasını yeniden göndermez; sistemin onu bir şekilde hatırlaması gerekir. Bunun iki yaygın yolu vardır:

Sunucu tarafı oturumToken (ör. JWT)
Bilgi nerede?Sunucuda; tarayıcıda yalnızca rastgele bir oturum kimliği (cookie) bulunurİmzalı token'ın içinde; sunucu her istekte imzayı doğrular
Oturumu sonlandırmaKolay: sunucudaki kaydı silmek yeterliZor: token süresi dolana kadar geçerlidir; kısa ömür ve ek mekanizma gerekir
Tipik kullanımKlasik web uygulamaları, yönetim panelleriAPI'ler, mobil istemciler, servisler arası iletişim

Token tabanlı yaklaşımda en sık kullanılan biçim JWT'dir. "Google ile giriş yap" gibi dış kimlik sağlayıcılarla giriş ise OAuth üzerine kurulu OpenID Connect ile yapılır. Hangi yol seçilirse seçilsin, tarayıcıda tutulan oturum çerezleri HttpOnly, Secure ve uygun bir SameSite değeriyle işaretlenmelidir. Kimliği doğrulanamayan bir API isteğine verilecek doğru yanıt ise 401 Unauthorized HTTP durum kodudur; adı yanıltıcı olsa da bu kod "kim olduğunu bilmiyorum" anlamına gelir.

Sık yapılan hatalar

  • Girişi izinle karıştırmak: Kullanıcının oturum açmış olması her kaynağa erişebileceği anlamına gelmez. Bu karar yetkilendirme katmanının işidir ve ayrıca kodlanmalıdır.
  • Fazla konuşkan hata mesajları: "Bu e-posta kayıtlı değil" ile "Parola yanlış" mesajlarını ayırmak, saldırgana hangi hesapların var olduğunu söyler. "E-posta veya parola hatalı" gibi genel bir mesaj daha güvenlidir.
  • Deneme sınırı koymamak: Hız sınırlaması (rate limiting) ve şüpheli girişlerde ek doğrulama olmadan, sızdırılmış parola listeleriyle yapılan toplu denemeler (credential stuffing) kolayca sonuç verir.
  • Karmaşıklık kurallarına fazla güvenmek: NIST'in dijital kimlik rehberi (SP 800-63B), zorunlu sembol kuralları ve periyodik parola değiştirme yerine uzunluğu ve parolanın sızdırılmış parola listelerinde olup olmadığının kontrol edilmesini öne çıkarır.
  • Parola sıfırlama akışını unutmak: Tahmin edilebilir ya da süresiz sıfırlama bağlantıları, en güçlü giriş ekranını bile işe yaramaz hâle getirir. Bağlantılar tek kullanımlık ve kısa ömürlü olmalıdır.

İlgili terimler

← Sözlüğe dön