Brakuje innych odpowiedzi, że należy rozumieć, że Uwierzytelnianie i autoryzacja w kontekście RFC 2616 odnosi się TYLKO do protokołu uwierzytelniania HTTP RFC 2617. Uwierzytelnianie przez schematy poza RFC2617 nie jest obsługiwane w kodach stanu HTTP i nie jest brane pod uwagę przy podejmowaniu decyzji, czy użyć 401, czy 403.
Krótkie i zwięzłe
Brak autoryzacji wskazuje, że klient nie jest uwierzytelniony RFC2617, a serwer inicjuje proces uwierzytelnienia. Zabronione oznacza, że klient jest uwierzytelniony RFC2617 i nie ma autoryzacji lub serwer nie obsługuje RFC2617 dla żądanego zasobu.
Oznacza to, że jeśli masz swój własny proces logowania i nigdy nie używasz uwierzytelniania HTTP, 403 jest zawsze właściwą odpowiedzią i 401 nigdy nie powinno być używane.
Szczegółowy i szczegółowy
Z RFC2616
10.4.2 401 Niedozwolone
Żądanie wymaga uwierzytelnienia użytkownika. Odpowiedź MUSI zawierać pole nagłówka Uwierzytelnianie WWW (sekcja 14.47) zawierające wyzwanie mające zastosowanie do żądanego zasobu. Klient MOŻE powtórzyć żądanie z odpowiednim polem nagłówka Autoryzacja (sekcja 14.8).
i
10.4.4 403 Zabronione Serwer zrozumiał żądanie, ale odmawia jego spełnienia. Autoryzacja nie pomoże, a prośba NIE POWINNA zostać powtórzona.
Pierwszą rzeczą, o której należy pamiętać, jest to, że „Uwierzytelnianie” i „Uwierzytelnianie” w kontekście tego dokumentu odnoszą się konkretnie do protokołów uwierzytelniania HTTP z RFC 2617. Nie odnoszą się one do żadnych opracowanych przez siebie protokołów uwierzytelniania używając stron logowania itp. Będę używał słowa „login” w odniesieniu do uwierzytelniania i autoryzacji metodami innymi niż RFC2617
Tak więc prawdziwą różnicą nie jest to, na czym polega problem, a nawet czy istnieje rozwiązanie. Różnica polega na tym, co serwer oczekuje od klienta w następnej kolejności.
401 wskazuje, że nie można podać zasobu, ale serwer ZAPYTA, aby klient logował się za pośrednictwem uwierzytelniania HTTP i wysłał nagłówki odpowiedzi w celu zainicjowania procesu. Możliwe, że istnieją autoryzacje, które umożliwią dostęp do zasobu, być może nie, ale spróbujmy i zobaczmy, co się stanie.
403 wskazuje, że nie można zapewnić zasobu i dla obecnego użytkownika nie ma sposobu na rozwiązanie tego za pomocą RFC2617 i nie ma sensu próbować. Może to wynikać z faktu, że wiadomo, że żaden poziom uwierzytelnienia nie jest wystarczający (na przykład z powodu czarnej listy IP), ale może być tak, ponieważ użytkownik jest już uwierzytelniony i nie ma uprawnień. Model RFC2617 to jeden użytkownik, jedno poświadczenie, więc przypadek, w którym użytkownik może mieć drugi zestaw poświadczeń, które mogą być autoryzowane, może zostać zignorowany. Nie sugeruje ani nie sugeruje, że jakaś strona logowania lub inny protokół uwierzytelniania inny niż RFC2617 może, ale nie musi pomóc - to jest poza standardami i definicją RFC2616.
Edycja: RFC2616 jest przestarzały, patrz RFC7231 i RFC7235 .