İletişim

401 Unauthorized Nedir?

Kısa tanım

401 Unauthorized, isteğin hedef kaynak için geçerli kimlik bilgileri içermediği için uygulanmadığını bildiren HTTP durum kodudur. Adı “yetkisiz” dese de asıl anlamı “kimliği doğrulanmamış”tır. Sunucu, istemcinin nasıl kimlik doğrulaması yapacağını anlatan WWW-Authenticate başlığını göndermek zorundadır; istemci yeni ya da geçerli bilgilerle isteği tekrarlayabilir.

Diğer adları: HTTP 401, 401 hatası, kimlik doğrulama gerekli

Kimlik bilgisi olmayan isteğe 401 ve WWW-Authenticate başlığı döndüğünü, girişten sonra yeniden denemenin başarılı olduğunu gösteren şema

İsim yanıltıcı: sorun yetki değil, kimlik

HTTP'nin en bilinen isim hatalarından biri budur. 401'in adı “Unauthorized” olsa da anlattığı durum kimlik doğrulamanın yapılmamış ya da başarısız olmuş olmasıdır: sunucu karşısındakinin kim olduğunu bilmiyor. Kim olduğu bilinen ama o kaynağa erişme izni olmayan bir kullanıcı için doğru kod 403 Forbidden'dır; o durum yetkilendirme sorunudur.

Pratik bir ayrım: 401 “kendini tanıt” der ve istemcinin farklı bilgilerle tekrar denemesini bekler; 403 “seni tanıyorum, ama hayır” der.

WWW-Authenticate başlığı zorunludur

RFC 9110'a göre 401 üreten sunucu, kaynak için geçerli en az bir kimlik doğrulama yöntemini bildiren WWW-Authenticate başlığını göndermek zorundadır. Bu başlık olmadan istemci ne yapması gerektiğini bilemez.

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="staging"

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token",
                  error_description="The access token expired"

İlk örnek tarayıcının kullanıcı adı ve parola soran yerleşik penceresini açar. İkincisi token tabanlı API'lerde kullanılan biçimdir ve OAuth 2.0 bearer token standardından (RFC 6750) gelir.

API'lerde 401 ile 403'ü doğru ayırmak

DurumKodİstemci ne yapmalı?
Token hiç gönderilmemiş401Kimlik doğrulayıp yeniden denemeli
Token süresi dolmuş, iptal edilmiş ya da bozuk401 (invalid_token)Yeni token alıp bir kez daha denemeli
Token geçerli ama gereken kapsam (scope) yok403 (insufficient_scope)Aynı token'la tekrar denememeli

Bu ayrım istemci kodunu doğrudan etkiler. İyi bir istemci 401 aldığında erişim token'ını yenileyip isteği bir kez tekrarlar; 403'te ise yenilemenin işe yaramayacağını bilir ve kullanıcıya yetki hatası gösterir. Her yetki hatasına 401 dönen bir API, istemcileri gereksiz yenileme döngülerine sokar.

Arama motorları ve 401

Google, 401'i diğer 4xx kodları gibi “içerik yok” olarak işler: URL dizine eklenmez, daha önce eklenmişse çıkarılır. Search Console'un Sayfa dizine ekleme raporunda bu sayfalar 401 kodunu adıyla anan ayrı bir neden altında (İngilizce arayüzde “Blocked due to unauthorized request (401)”) listelenir. Bu davranış bir avantaj olarak da kullanılabilir: staging ortamını HTTP kimlik doğrulamasının arkasına almak, robots.txt'ye güvenmekten çok daha sağlam bir korumadır; robots.txt taramayı engeller ama bağlantı verilen bir URL'nin dizinde görünmesini tek başına engellemez. Google ayrıca 401 ve 403'ün tarama hızını sınırlamak için kullanılmamasını açıkça belirtir.

İlgili terimler

← Sözlüğe dön