403 Forbidden vs 401 Unauthorized HTTP yanıtları

Var olan, ancak yeterli ayrıcalıklara sahip olmayan (oturum açmamış veya uygun kullanıcı grubuna ait olmayan) bir kullanıcının bulunduğu bir web sayfası için, sunulması gereken uygun HTTP yanıtı nedir? 401? 403? Başka bir şey mi? Şimdiye kadar okuduklarım ikisi arasındaki fark konusunda çok net değil. Her yanıt için hangi kullanım durumları uygundur?

Çözüm

Daniel Irvine]1'den net bir açıklama:

Kimlik doğrulama hataları için HTTP durum kodu olan 401 Yetkisiz ile ilgili bir sorun var. Ve sadece bu: kimlik doğrulama içindir, yetkilendirme için değil. 401 yanıtı almak, sunucunun size şunu söylemesidir: "Siz kimliği doğrulanmış-ya hiç doğrulanmamış ya da doğrulanmış hatalı-ama lütfen yeniden kimlik doğrulaması yapın ve tekrar deneyin." Sana yardım etmek için, her zaman nasıl doğrulama yapılacağını açıklayan bir WWW-Authenticate başlığı içerecektir. doğrulamak için.

Bu genellikle web sunucunuz tarafından döndürülen bir yanıttır, web sunucunuz tarafından değil uygulama.

Bu aynı zamanda çok geçici bir şeydir; sunucu sizden tekrar.

Yetkilendirme için 403 Forbidden yanıtını kullanıyorum. Bu kalıcıdır, uygulama mantığıma bağlıdır ve daha somut bir 401'den daha fazla yanıt.

403 yanıtı almak, sunucunun size "Özür dilerim. Biliyorum kim olduğunuza - kim olduğunuzu söylediğinize inanıyorum - ama sadece bu kaynağa erişim izni. Belki sisteme sorarsanız Yönetici kibarca, izin alacaksınız. Ama lütfen rahatsız etmeyin Durumunuz değişene kadar beni tekrar arayın."

Özetle, eksik bilgiler için 401 Yetkisiz yanıtı kullanılmalıdır. veya hatalı kimlik doğrulama ve 403 Yasak yanıtı kullanılmalıdır daha sonra, kullanıcının kimliği doğrulandığında ancak yetkisi olmadığında verilen kaynak üzerinde istenen işlemi gerçekleştirir.

Http durum kodlarının nasıl kullanılması gerektiğine dair bir başka güzel resimsel format.

Yorumlar (26)

Bkz. RFC2616:

401 Yetkisiz:

İstek zaten Yetkilendirme kimlik bilgilerini içeriyorsa, 401 yanıtı bu kimlik bilgileri için yetkilendirmenin reddedildiğini gösterir.

403 Yasak:

Sunucu isteği anladı, ancak yerine getirmeyi reddediyor.

Güncelleme

Kullanım örneğinizden, kullanıcının kimliğinin doğrulanmadığı anlaşılıyor. Ben olsam 401 döndürürdüm.


Düzenleme: RFC2616 artık kullanılmamaktadır, RFC7231 ve RFC7235'e bakın._

Yorumlar (14)

RFC 2616]1'e göre (HTTP/1.1) 403 şu durumlarda gönderilir:

Sunucu isteği anladı, ancak yerine getirmeyi reddediyor. Yetkilendirme yardımcı olmayacaktır ve istek tekrarLANMAMALIDIR. İstek yöntemi HEAD değilse ve sunucu isteğin neden yerine getirilmediğini kamuya açıklamak istiyorsa, reddetme nedenini varlıkta açıklamalıdır. Sunucu bu bilgiyi istemciye sunmak istemiyorsa, bunun yerine 404 (Bulunamadı) durum kodu kullanılabilir

Başka bir deyişle, istemci kimlik doğrulaması yaparak kaynağa erişebiliyorsa 401 gönderilmelidir.

Yorumlar (7)