HTTP durum kodu 401 veya 403? Kimlik doğrulama ve yetki hataları nasıl farklıdır?
401 Yetkisiz, istemcinin kimlik doğrulaması yapılmadığını ve geçerli kimlik bilgileri gerektirdiğini belirtir. 403 Yasak, istemcinin doğrulama yapıldığını ancak kaynağa erişim için gerekli izinlere sahip olmadığını ifade eder.
Her seferinde bir web sayfası yüklendiğinde, ödeme yapıldığında veya bir uygulamaya giriş yapıldığında, cihazınız ve sunucu arasında görünmez bir sohbet gerçekleşir. Bu, bir mesaj göndermek ve bir yanıt beklemek gibi bir şeydir—bazen 'tamam' işareti alırsınız, bazen nazik bir 'tekrar dene' ve bazen ise doğrudan 'hayır'. Bu yanıtlar, HTTP durum kodları olarak bilinir ve internetin şarkı söylemeyen kahramanlarıdır; iletişim akışını sessizce yönlendirir ve her şeyin sorunsuz ilerlemesini sağlar—ya da en azından yolunda gitmediğinde size bilgi verir.
HTTP durum kodları nedir?
HTTP durum kodları, istemci (tarayıcınız veya uygulamanız gibi) ile bir sunucu arasında gerçekleşen iletişimin sinyalleri gibidir. Bir istekte bulunduğunuzda neler olduğunu hızlı ve net bir şekilde güncelleyerek her şeyin sorunsuz mu geçtiğini, bir şeylerin mi yanlış gittiğini yoksa ek eylem gerekip gerekmediğini bildirirler. Bunu, iyi yönetilen bir fırını ziyaret etmek gibi düşünebiliriz:
200: Her şey mükemmel
Bir kruvasan istersiniz ve fırıncı gülümseyerek onu size verir ve "Buyrun!" der. İşte bu bir HTTP 200 OK—istek başarılı oldu ve her şey beklendiği gibi çalıştı.
200 OK HTTP durum kodu, istemcinin isteğinin sunucu tarafından başarıyla alındığını, anlaş ıldığını ve işlendiğini gösteren en yaygın kodlardan biridir.
301: Taşındık
Favori fırınınıza vardınız, ancak "123 Yeni Cadde'ye Taşındık" yazan bir işaret var. Bu bir 301 Moved Permanently. Sunucu, tarayıcınızı otomatik olarak yeni adrese yönlendirir.
301 Moved Permanently HTTP durum kodu, istenen kaynağın kalıcı olarak yeni bir URL'ye taşındığını gösterir. Bu durum, istemciye (örn. bir tarayıcı veya API istemcisi) gelecekteki istekler için kayıtlarını güncellemesi ve yeni URL'yi kullanması gerektiğini bildirir.
404: Üzgünüz, burada değil
Bir çikolatalı çörek istersiniz ve fırıncı, "Onları burada yapmıyoruz" der. Bu bir 404 Not Found—aradığınız kaynak sunucuda mevcut değil.
404 Not Found HTTP durum kodu, sunucunun istenen kaynağı bulamadığını gösterir. Bu yanıt, istemcinin isteğinin geçerli olduğunu ancak sunucunun istenen kaynağı bulamadığını belirtir.
401: Kimsiniz?
VIP salona girmeye çalışırsınız, ancak güvenlik görevlisi sizi durdurur ve "Üyelik kartınızı gösterin" der. Bu bir 401 Unauthorized—kaynağa erişmeden önce kimlik doğrulaması gereklidir.
401 Unauthorized HTTP durum kodu, istemcinin isteğinin geçerli bir kimlik doğrulama kimliği eksik olduğu için uygulanmadığını belirtir. Sunucu, istenen kaynağa erişmek için istemcinin kendini doğrulamasını gerektirir.
403: Senin için değil
Üyelik kartınızı gösterirsiniz, ancak güvenlik görevlisi "Sadece platin üyeler girebilir" der. Bu bir 403 Forbidden—kimliğiniz doğrulanmış ancak kaynağa erişmek için gerekli izinlere sahip değilsiniz.
403 Forbidden HTTP durum kodu, sunucunun istemcinin isteğini anladığını ancak istemci gerekli izinlere sahip olmadığı için isteği yerine getirmeyi reddettiğini belirtir. Bu, 401 Unauthorized durumundan farklıdır çünkü istemci zaten kimlik doğrulama yapmıştır (veya isteğin kimlik doğrulaması gerekmez), ancak kaynağa erişim açıkça reddedilir.
500: Fırın alev aldı
Bir sipariş verirsiniz, ancak aniden mutfaktan duman çıkar. Fırıncı, "Siparişinizi yerine getiremiyoruz; içsel bir sorun çıktı" der. Bu bir 500 Internal Server Error—sunucu beklenmeyen bir sorunla karşılaştı.
500 Internal Server Error HTTP durum kodu, sunucunun isteği yerine getirmesini engelleyen beklenmedik bir durumla karşılaştığını belirtir. Bu, neyin yanlış gittiğine dair özel detaylar sağlamayan genel bir hata yanıtıdır.
503: Geçici olarak kullanılamıyor
Fırına gidersiniz, ancak "Bakım için Kapalı" yazısı vardır. Fırın daha sonra yeniden açılacaktır. Bu bir 503 Service Unavailable—sunucu, isteğinizi geçici olarak işleyemiyor, genellikle aşırı yüklenme veya bakım nedeniyle.
503 Service Unavailable HTTP durum kodu, sunucunun isteği geçici olarak işleyemediğini belirtir. Bu, sunucu aşırı yüklenmesi, bakım veya diğer geçici durumlar nedeniyle olabilir. 500 Internal Server Error'un aksine, 503 sorunun yakında çözülmesi beklendiğini belirtir.
HTTP durum kodları, istemciler ve sunucular arasında etkili iletişimin korunmasında anahtar rol oynar. İstemcilere isteklerinin başarılı olup olmadığını, başarısız olup olmadığını veya ek eylem gerekip gerekmediğini hızlı bir şekilde bildirirler. Geliştiriciler ve BT profesyonelleri için, bu kodları anlamak sorun giderme, daha iyi hata işleme tasarlama ve genel kullanıcı deneyimini geliştirmeye yardımcı olur.
Bunları, internetin süregelen konuşmasındaki profesyonel, standartlaştırılmış sinyaller olarak düşünün.
Bu makalede, kimlik doğrulama (AuthN) ve yetkilendirme (AuthZ) ile yakından ilişkili oldukları için 401 ve 403 hatalarına odaklanmak istiyorum.
401 Unauthorized ne zaman kullanılır?
401 Unauthorized HTTP durum kodu, istemci isteğinin kimlik doğrulaması gerektirdiğinde, ancak eksik, geçersiz veya başarısız olduğunda kullanılır. Bu, istemcinin istenen kaynağa erişmek için kendini doğrulaması gerektiğini bildirir. Authentication ile 401 Unauthorized durum kodu arasındaki ilişki, bir isteğin ilerleyip ilerleyemeyeceğini belirlemede kimlik doğrulamanın rolünde yatar.
401 unauthorized WWW-Authenticate başlığını içermelidir; bu, nasıl kimlik doğrulaması yapılacağını belirtir.
Peki, 401 Unauthorized kullanımına yönelik yaygın senaryolar nelerdir?
-
Kimlik doğrulama eksik
İstek, gerekli kimlik doğrulama kimlik bilgilerini içermez. Örneğin: Yetkilendirilmiş bir API uç noktasına Authorization başlığı olmadan bir istek yapılır.
-
Geçersiz kimlik doğrulama kimlik bilgileri
İstemci kimlik bilgilerini sunar, ancak bunlar yanlış veya sunucunun beklediğiyle eşleşmez. Örneğin, bir kullanıcı geçersiz bir API anahtarı veya hatalı biçimlendirilmiş bir belirteç gönderir.
-
Süresi geçmiş kimlik doğrulama belirteci
Kimlik doğrulama belirteci geçerlidir ancak süresi dolmuştur, istemcinin tekrar kimlik doğrulaması yapması gerekir. Örneğin, geçmiş son kullanma tarihi (exp iddiası) olan bir JWT belirteci.
-
Eksik veya hatalı biçimlendirilmiş yetkilendirme başlığı
Yetkilendirme başlığı gereklidir ancak ya sağlanmamış ya da yanlış biçimlendirilmiştir.
-
Desteklenmeyen kimlik doğrulama şeması
Sunucu, istemci tarafından sağlanan kimlik doğrulama yöntemini desteklemez. Örneğin: İstemci bir Basic kimlik doğrulama başlığı gönderir, ancak sunucu yalnızca Bearer belirteçlerini destekler.
-
Geçersiz oturum veya belirteç iptali
Kullanıcının oturumu geçersiz kılınmıştır veya belirteci iptal edilmiştir. Örneğin: Bir kullanıcı oturumu kapatır, ancak aynı belirteç korumalı bir kaynağa erişmek için kullanılır.
Örnek yanıt
403 Forbidden ne zaman kullanılır?
403 Forbidden HTTP durum kodu, sunucunun isteği anladığı ve istemcinin kimliğini (doğrulandıysa) tanıdığı ancak yetersiz izinler nedeniyle erişimi reddettiğini belirtir. "Bunu yapmana izin verilmiyor" şeklinde açık bir sinyal vererek erişim sınırlarını netleştirir ve güvenlik politikalarını güçlendirir.
401 Unauthorized ve 403 Forbidden arasındaki fark, kimlik doğrulama ve yetkilendirme bağlamlarındaki rollerinde yatar.
Yetkilendirme, authentication 'dan ayrı bir mekanizmadır. Kimlik doğrulama kim olduğunuzu tanımlarken, yetkilendirme, belirli kaynaklara erişip erişemeyeceğinizi ve onlarda hangi işlemleri gerçekleştirebileceğinizi belirler.
AuthN ve AuthZ hakkında detaylı farkları öğrenmek için aşağıdaki makalelere göz atın.
Peki 403 Forbidden kullanımına yönelik yaygın senaryolar nelerdir?
-
Doğrulanmış ancak izin eksik
İstemci oturum açmış veya doğrulanmıştır ancak gerekli izin veya role sahip değildir. Örneğin, "görüntüleyici" rolüne sahip bir kullanıcı, "düzenleyici" ayrıcalıkları gerektiren bir dosyayı silmeye çalışır.
-
Kaynağa erişim kısıtlanmış
Kaynağa erişim, belirli kullanıcılar veya gruplarla sınırlıdır. Örneğin: Özel bir belge, belirli kullanıcılarla paylaşılmış ancak erişim listesinde olmayan biri tarafından erişilmeye çalışılır.
-
IP veya coğrafi engelleme
İstemcinin IP adresi veya coğrafi konumu sunucu tarafından engellenmiştir. Örneğin: kısıtlanmış bir bölgeden bir kullanıcı, yalnızca belirli ülkelerde faaliyet gösteren bir hizmete erişmeye çalışır.
-
Politika tarafından engellenmiş eylemler
İstemci, sunucu tarafından yasaklanan bir eylemde bulunmaya çalışır. Örneğin: bir kullanıcı "yalnızca okunabilir" olarak işaretlenmiş bir kaynağı değiştirmeye çalışır.
-
Engellenmiş statik kaynaklar
Sunucu, güvenlik nedenleriyle belirli statik dosya veya dizinlere erişimi reddeder.
Örnek: Bir kullanıcı bir .htaccess dosyasına veya sunucunun yapılandırma dosyasına erişmeye çalışır.
-
Hesap askıya alındı veya devre dışı bırakıldı
İstemcinin hesabı ihlaller veya etkinliksizlik nedeniyle devre dışı bırakılmış veya engellenmiştir. Örneğin: Bir kullanıcı askıya alınmış bir hesapla giriş yapmaya veya kaynaklara erişmeye çalışır.
-
Eylem için yükseltilmiş izinler gerekiyor
İstenen eylem özel ayrıcalıklar (örn. admin veya süper kullanıcı) gerektirir. Örneğin: Standart bir kullanıcı, yalnızca admin uç noktalarına erişmeye çalışır.
Örnek Yanıt:
401 unauthorized hatasını nasıl giderebilirim?
Bir 401 hatası genellikle kimlik doğrulaması gerektiği ve başarısız olduğu anlamına gelir.
Kimlik bilgilerini kontrol et
Authorization başlığının mevcut ve doğru formatta olduğundan emin olun ve kimlik bilgilerini (API anahtarı, belirteç veya parola) doğrulayın; yanlış girmiş olabilirsiniz ve bu yaygın bir 401 hatası nedenidir.
Kimlik doğrulama yöntemini onayla
Sunucu, sağlanan yöntemden farklı bir kimlik doğrulama methodu bekleyebilir. İstemci ve sunucu uyumlu değilse bu olabilir. Sunucu tarafından belirtilen yöntem (örn. Basic, Bearer, API Key) ve doğru sözdizimi kullanın.
Sunucu yanıtını incele
Hata detayları için yanıt metnini inceleyin ve WWW-Authenticate başlığındaki kimlik doğrulama talimatlarına bakın.
İsteği doğrula
Uç noktayı, sorgu parametrelerini ve ana bilgisayarı doğrulayın ve erişmeye çalıştığınız kaynağın kimlik doğrulaması gerekip gerekmediğini kontrol edin.
Belirteç sorunlarını kontrol et
Belirtecin geçerliliğini denetleyin ve inceleyin, geçerlilik, son kullanma tarihine bakın ve belirtecin hedef kitlesinin API'nın talepleriyle eşleştiğini doğrulayın (örn. https://logto.io/jwt-decoder).
403 forbidden hatasını nasıl giderebilirim?
403 forbidden hatası, genellikle yetki sürecinin tamamlandığı ancak erişimin reddedildiği anlamına gelir. Bu hatayı gidermek için aşağıdaki durumu dikkate alın:
İzinleri doğrula
Hesabınızın, API anahtarının veya belirtecin kaynağa gerekli izinlere sahip olduğunu doğrulayın. Kaynağın belirli rollere veya gruplara kısıtlanıp kısıtlanmadığını kontrol edin.
Kimlik doğrulamanın doğru olduğundan emin olun
Doğru bir şekilde kimlik doğrulaması yaptığınızdan emin olun (örn. geçerli bir belirteç veya kimlik bilgileri ile).
Sunucu tarafından gereksinim duyulan kimlik doğrulama yöntemini çift kontrollü olarak kontrol edin.
Kaynağı doğrulayın
İstenen kaynağın mevcut olduğunu ve ona erişim hakkınız olduğunu doğrulayın. API kullanıyorsanız, dokümantasyondaki uç nokta gereksinimlerini kontrol edin.
IP veya konum engellemesi olup olmadığını kontrol et
IP adresinizin veya coğrafi konumunuzun sunucu tarafından kısıtlanıp kısıtlanmadığını kontrol edin.
Sunucu politikalarını gözden geçirin
İstenen eylemin sunucu kurallarına veya politikalarına (örn. yalnızca okunabilir bir kaynağa erişmeye çalışmak) aykırı olup olmadığını kontrol edin.
Sunucu yanıtını incele
403 hatasına neden olan durumları açıklayan detayları incelemek için yanıt metnine göz atın.
Tek bir istek hem 401, hem de 403 durum kodu dönebilir mi?
Hayır, tek bir HTTP isteği aynı anda hem 401 Unauthorized hem de 403 Forbidden durum kodlarını içeremez çünkü bir HTTP yanıtı yalnızca bir durum kodunu içerebilir.
401 ve 403 hata kodlarının kimlik doğrulama ve yetkilendirmede pratik kullanımı
Modern uygulama geliştirme sürecinde, 401 Unauthorized ve 403 Forbidden iki HTTP durum kodu, geliştiricilerin sıkça karşılaştığı durumlardır. Benzer görünseler de, anlamları ve kullanım senaryoları farklıdır. Bu makale, bu kodların kimlik doğrulama, yetkilendirme, çoklu kiralama ve çok faktörlü kimlik doğrulama (MFA) gibi senaryolarda pratik örneklerle farklarını açıklamaktadır.
- Giriş senaryosu: Bir kullanıcı, giriş yapmadan veya geçerli kimlik bilgileri sağlamadan korumalı bir sayfaya erişmeye çalışır. Sunucu yanıt verir ve 401 Unauthorized hatası atar: “Bu sayfaya erişmek için giriş yapmanız veya geçerli kimlik bilgileri sağlamanız gerekiyor.”
- Erişim kontrol senaryosu: Aynı kullanıcı başarılı bir şekilde giriş yapar, ancak gerekli yönetici rolü olmadan yalnızca yöneticilere ait bir sayfaya erişmeye çalışır. Sunucu yanıt verir ve 403 Forbidden hatası atar: “Giriş yaptınız, ancak bu sayfaya erişme izniniz yok.”
- Çoklu kiracı senaryosu: Aynı kullanıcı giriş yapar, ancak Kiracı A'ya aittir ve Kiracı B'deki bir kaynağa erişmeye çalışır ve oraya erişim hakkı yoktur. Sunucu yanıt verir ve 403 Forbidden hatası atar: “Kimliğiniz doğrulandı, ancak Kiracı B'deki bu kaynağa erişme izniniz yok.”
- MFA senaryosu: Bir kullanıcı giriş yapmaya çalışır, ancak gerekli Çok Faktörlü Kimlik Doğrulama (MFA) işlemini tamamlamamıştır. Sunucu yanıt verir ve 401 Unauthorized hatası atar: “Kimlik doğrulama tamamlanmamış. Devam etmek için lütfen MFA'yı tamamlayın.”
Kimlik doğrulama ve yetkilendirme sağlayıcısı olarak Logto kullanımı
Logto esasen bir kimlik doğrulama sağlayıcısıdır ve parolasız giriş, e-posta ve şifre, MFA, Kurumsal SSO ve sosyal giriş gibi yöntemler sunar, tümü OIDC, OAuth 2.0 ve SAML gibi açık standart protokollerine dayanır.
Logto Cloud ayrıca önemli yetkilendirme özellikleri sağlar, bunlar arasında Role-Based Access Control (RBAC), Organizations (Multi-Tenancy) ve Custom Token Claims bulunmaktadır ve çeşitli yetkilendirme ihtiyaçlarını karşılamaya yöneliktir.