Yan yana
Kimlik DoğrulamavsYetkilendirme
Kimlik doğrulama (authentication) ile yetkilendirme (authorization) arasındaki fark nedir?
Güncellendi 2 dk okuma7 fark
Kısaca
Kimlik doğrulama, parola ya da passkey gibi yollarla kim olduğunuzu doğrular; yetkilendirme ise kimliğiniz bilindikten sonra neler yapabileceğinize karar verir.
Kimlik Doğrulama
Authentication
Kimlik doğrulama, bir kullanıcının, cihazın veya servisin gerçekten iddia ettiği kişi olduğunu, örneğin parola ya da passkey kontrol ederek doğrulama işlemidir.
Kimlik Doğrulama sayfasını okuYetkilendirme
Authorization
Yetkilendirme, kimliği doğrulanmış bir kullanıcının ya da servisin hangi verileri okuyabileceğine, değiştirebileceğine veya silebileceğine karar vermektir.
Yetkilendirme sayfasını okuKimlik Doğrulama ve Yetkilendirme karşılaştırması
| Özellik | Kimlik Doğrulama | Yetkilendirme |
|---|---|---|
| Yanıtladığı soru | Sen kimsin? | Neler yapmana izin var? |
| Ne zaman olur | Önce, genellikle girişte | Kimlik doğrulamadan sonra, her korumalı eylemde |
| Dayandığı şeyler | Parolalar, passkey'ler, tek kullanımlık kodlar, biyometri | Roller, izinler, politikalar ve sahiplik |
| Kullanıcı katılımı | Kullanıcı kimlik bilgilerini sağlar | Çoğunlukla görünmez; sistem kuralları uygular |
| Başarısızlık durumu | 401 Unauthorized | 403 Forbidden |
| Kim değiştirir | Kullanıcı, örneğin parolayı sıfırlayarak | Bir yönetici ya da sahip, örneğin bir rol vererek |
| Yaygın standartlar | OpenID Connect, SAML, WebAuthn | OAuth 2.0 kapsamları (scope), RBAC ve ABAC politikaları |
Fark, açıklamalı
Kimlik doğrulama, sıkça authn diye kısaltılır ve kimliği kanıtlama sürecidir: sistem bir parolayı, tek kullanımlık bir kodu, bir passkey'i ya da bir sertifikayı denetler ve 42 numaralı kullanıcı olduğunuz sonucuna varır. Yetkilendirme, ya da authz, izinleri denetleme sürecidir: 42 numaralı kullanıcı olduğunuza göre bu faturayı görüntüleyebilir ya da şu ayarları değiştirebilir misiniz?
İkisi ayrıdır, çünkü farklı sorulara yanıt verir ve farklı zamanlarda değişir. Kimliğiniz tüm oturum boyunca aynı kalır, ama izinler kaynağa ve eyleme bağlıdır; roller (RBAC), nitelikler ya da sahiplik kurallarından gelebilir. İkisini ayrı tutmak, izin kurallarını yeniden yazmadan insanların nasıl giriş yaptığını, ya da tersini değiştirmenizi sağlar.
Pratikte her korumalı istekte art arda çalışırlar: önce kimlik doğrulama, sonra yetkilendirme. HTTP'nin her başarısızlık için bir durum kodu bile vardır: 401 Unauthorized çağıranın kimliğinin doğrulanmadığı, 403 Forbidden ise çağıranın bilindiği ama izni olmadığı anlamına gelir. Standartlar da aynı ayrımı izler: OpenID Connect girişi, OAuth 2.0 ise erişim vermeyi ele alır.
Sık yapılan bir yanlış, OAuth'un bir kimlik doğrulama protokolü olduğu düşüncesidir. OAuth 2.0 yetkilendirme için tasarlanmıştır; bir uygulamanın bir kullanıcı adına kaynaklara erişmesini sağlar ve bunun üzerindeki kimlik OpenID Connect'ten gelir. Bir diğeri, giriş yapmanın yeterli olduğu düşüncesidir: uygun yetkilendirme denetimleri olmayan, kimliği doğrulanmış bir kullanıcı çoğu zaman diğer kullanıcıların verilerini okuyabilir.
Hangisini kullanmalısınız?
Kimlik Doğrulama şu durumlarda doğru seçim:
- Başka bir şey olmadan önce kullanıcının kimliğini doğrulamanız gerekiyor.
- Giriş, kayıt, parola sıfırlama ya da çok faktörlü akışlar geliştiriyorsunuz.
- API'nizi hangi servisin ya da cihazın çağırdığını doğrulamanız gerekiyor.
Yetkilendirme şu durumlarda doğru seçim:
- Farklı kullanıcılar farklı şeyleri görmeli veya değiştirmeli.
- Roller, izinler ya da yönetici özellikleri tasarlıyorsunuz.
- Üçüncü taraf bir uygulamanın kullanıcı verileriyle neler yapabileceğini sınırlamanız gerekiyor.
Web sunucusu ara katmanında (middleware) iki ayrı denetim
// Authentication: who is making this request?
function authenticate(req, res, next) {
const user = verifyToken(req.headers.authorization);
if (!user) return res.status(401).send("Please log in");
req.user = user;
next();
}// Authorization: may this user perform this action?
function requireRole(role) {
return (req, res, next) => {
if (!req.user.roles.includes(role)) {
return res.status(403).send("Not allowed");
}
next();
};
}Sık sorulan sorular
401 ile 403 arasındaki fark nedir?
401 Unauthorized, isteğin geçerli kimlik bilgilerinden yoksun olduğu, yani sunucunun kim olduğunuzu bilmediği anlamına gelir. 403 Forbidden ise sunucunun kim olduğunuzu bildiği ama izninizin olmadığı anlamına gelir.
OAuth kimlik doğrulama mı, yetkilendirme mi?
OAuth 2.0 bir yetkilendirme çerçevesidir: bir uygulamaya kaynaklara sınırlı erişim verir. OpenID Connect ise kimlik doğrulama için OAuth'un üzerine bir kimlik katmanı ekler.
Hangisi önce gelir, kimlik doğrulama mı yetkilendirme mi?
Kimlik doğrulama önce gelir; çünkü sistem neler yapabileceğinize karar vermeden önce kim olduğunuzu bilmelidir. Herkesin görebildiği herkese açık sayfalar ikisini de atlar.