Die anderen Antworten fehlen, dass verstanden werden muss, dass sich Authentifizierung und Autorisierung im Kontext von RFC 2616 NUR auf das HTTP-Authentifizierungsprotokoll von RFC 2617 bezieht. Die Authentifizierung durch Schemata außerhalb von RFC2617 wird in HTTP-Statuscodes nicht unterstützt und nicht berücksichtigt bei der Entscheidung, ob 401 oder 403 verwendet werden soll.
Kurz und knapp
Nicht autorisiert zeigt an, dass der Client nicht RFC2617-authentifiziert ist und der Server den Authentifizierungsprozess initiiert. Verboten gibt an, dass der Client entweder RFC2617-authentifiziert und nicht autorisiert ist oder dass der Server RFC2617 für die angeforderte Ressource nicht unterstützt.
Das heißt, wenn Sie einen eigenen Anmeldevorgang haben und niemals die HTTP-Authentifizierung verwenden, ist 403 immer die richtige Antwort und 401 sollte niemals verwendet werden.
Detailliert und ausführlich
Von RFC2616
10.4.2 401 Nicht autorisiert
Die Anforderung erfordert eine Benutzerauthentifizierung. Die Antwort MUSS ein WWW-Authenticate-Headerfeld (Abschnitt 14.47) enthalten, das eine für die angeforderte Ressource geltende Herausforderung enthält. Der Client kann die Anforderung mit einem geeigneten Feld für den Autorisierungsheader wiederholen (Abschnitt 14.8).
und
10.4.4 403 Verboten Der Server hat die Anfrage verstanden, weigert sich jedoch, sie zu erfüllen. Die Autorisierung hilft nicht und die Anfrage sollte nicht wiederholt werden.
Beachten Sie zunächst, dass sich "Authentifizierung" und "Autorisierung" im Kontext dieses Dokuments speziell auf die HTTP-Authentifizierungsprotokolle von RFC 2617 beziehen. Sie beziehen sich nicht auf von Ihnen erstellte Roll-Your-Own-Authentifizierungsprotokolle Verwenden von Anmeldeseiten usw. Ich werde "Anmelden" verwenden, um auf die Authentifizierung und Autorisierung durch andere Methoden als RFC2617 zu verweisen
Der wirkliche Unterschied besteht also nicht darin, was das Problem ist oder ob es eine Lösung gibt. Der Unterschied besteht darin, was der Server vom Client als Nächstes erwartet.
401 gibt an, dass die Ressource nicht bereitgestellt werden kann, der Server jedoch anfordert, dass sich der Client über die HTTP-Authentifizierung anmeldet und Antwortheader gesendet hat, um den Prozess zu starten. Möglicherweise gibt es Berechtigungen, die den Zugriff auf die Ressource ermöglichen, möglicherweise nicht, aber versuchen wir es mal und sehen, was passiert.
403 gibt an, dass die Ressource nicht bereitgestellt werden kann und es für den aktuellen Benutzer keine Möglichkeit gibt, dies durch RFC2617 zu lösen, und es macht keinen Sinn, es zu versuchen. Dies kann daran liegen, dass bekanntermaßen keine Authentifizierungsstufe ausreicht (z. B. aufgrund einer IP-Blacklist), aber möglicherweise daran, dass der Benutzer bereits authentifiziert ist und keine Berechtigung besitzt. Das RFC2617-Modell besteht aus einem Benutzer und einem Berechtigungsnachweis, sodass der Fall, in dem der Benutzer möglicherweise über einen zweiten Satz von Berechtigungsnachweisen verfügt, die autorisiert werden könnten, möglicherweise ignoriert wird. Es wird weder vorgeschlagen noch impliziert, dass eine Anmeldeseite oder ein anderes Nicht-RFC2617-Authentifizierungsprotokoll hilfreich sein kann oder nicht - das liegt außerhalb der RFC2616-Standards und -Definitionen.
Bearbeiten: RFC2616 ist veraltet, siehe RFC7231 und RFC7235 .