"401 Access Denied" ve "403 Forbidden" hata kodları

Bugüne kadar yazmış olduğum bloglar arasında açık ara en çok okunanı HTTP Error 401.2 Unauthorized başlıklı blogum oldu. Bu yazıma nerelerden erişildiğine baktığımda, arama motorlarında 401 hatası ile ilgili aramalar olduğunu gördüm. Bunun üzerine 401 ve 403 hata kodları ile ilgili daha detaylı bilgi vermenin faydalı olabileceğini düşündüm.

HTTP protokolü yanıt kodları

HTTP protokolü gereği, web sunucular, isteğe verecekleri yanıtıla ilgili bir durum kodu gönderirler. Bu kod, başarılı yanıtlarda 200’dür. 300’lü kodlar da başarılı yanıtlardır, ancak istenen içeriğin farklı bir adreste bulunduğu gibi bilgiler içerir. 400 ve daha büyük kodlar ise hata kodlarıdır.

400’den büyük kodları da aslında ikiye ayırabiliriz:

                400-499 arası: Kullanıcı tarafından kaynaklanan hatalar
500 ve yukarısı: Sunucu tarafından kaynaklanan hatalar

Burada IIS 5.0 ve 6.0 tarafından dönülebilecek tüm hata kodlarını alt kodlarıyla beraber bulabilirsiniz.

Bu blogun konusu olan 401 ve 403 hata kodları “kullanıcı tarafından kaynaklanan hatalar” olarak kabul ediliyor. Bu, kullanıcının birşeyleri yanlış yaptığı anlamında değildir. Sadece sorunun, web sunucusu ayarları ile kullanıcının isteği arasındaki uyumsuzluktan kaynaklandığı anlamına gelir.

401 Access denied

401 hata kodu, herhangi bir kaynağa erişimimiz engellendiğinde karşımıza çıkıyor. Bunun çeşitli nedenleri olabilir. Nedeni, alt hata koduna bakarak tespit edebiliriz:

401.1 - Logon failed.
401.2 - Logon failed due to server configuration.
401.3 - Unauthorized due to ACL on resource.
401.4 - Authorization failed by filter.
401.5 - Authorization failed by ISAPI/CGI application.
401.7 – Access denied by URL authorization policy on the Web server.

401.1 ve 401.2 hata kodları, eğer erişmeye çalıştığımız kaynağa “anonymous” olarak erişim engellenmişse karşımıza çıkar. Daha önce bir blogumda da bahsettiğim gibi, HTTP protokolünün yapısı gereği bir web sunucuya gelen her “ilk” istek “anonymous”tur. Yani kullanıcı bilgisi içermez. Eğer istediğimiz kaynak kimlik denetimi gerektiriyorsa web sunucusu bize 401.2 yanıtı dönecektir. Ardından yine protokol gereği bir 401.1 alırız ve üçüncü istekte eğer kimlik denetimi başarılı olursa 200 yanıtı ile istek tamamlanır.

Yukarıdaki yapı gereği, 401.2 ve 401.1 yanıtları genelde ortada bir sorun olduğu anlamına gelmez. Ancak, üçüncü istekte eğer kimlik denetimi başarısız olursa veya istediğimiz kaynağa erişim hakkımız yoksa duruma göre yine bir 401 hatası alırız.

403 Forbidden

403 kodları, 401 kodlarından farklı olarak yasaklılık bildirir. Bu kodların da alt kodları vardır ve aslında yeterince açıklayıcıdırlar:

403.1 - Execute access forbidden.
403.2 - Read access forbidden.
403.3 - Write access forbidden.
403.4 - SSL required.
403.5 - SSL 128 required.
403.6 - IP address rejected.
403.7 - Client certificate required.
403.8 - Site access denied.
403.9 - Too many users.
403.10 - Invalid configuration.
403.11 - Password change.
403.12 - Mapper denied access.
403.13 - Client certificate revoked.
403.14 - Directory listing denied.
403.15 - Client Access Licenses exceeded.
403.16 - Client certificate is untrusted or invalid.
403.17 - Client certificate has expired or is not yet valid.
403.18 - Cannot execute requested URL in the current application pool.
403.19 - Cannot execute CGIs for the client in this application pool.
403.20 - Passport logon failed.

Bu tür sorunları nasıl gideririz?

Yukarıda da belirttiğim gibi 401.1 ve 401.2 kodları genelde sorun belirtmez. Diğer alt kodlar ve 403 kodlu yanıtlar da, sorunun nedeni hakkında oldukça detay verir. Dolayısıyla, bu tür bir hatayla karşılaştığımız zaman ilk yapmamız gereken şey, alt hata kodunun ne olduğunu tespit etmek olmalıdır. Bunu da en sağlıklı olarak elde edebileceğimiz yer IIS loglarıdır.

Yine daha önceki bir blogumda bahsettiğim araçlardan AuthDiag ve Wfetch, bu tür sorunlarda çokça kullandığımız araçlardır.

Buradaki makalede en çok rastlanan senaryolar ve çözüm yollarını bulabilirsiniz.

CENK ISCAN