Beide beginnen mit 4 und gehören zur Klasse 4xx, also Fehlern in der Anfrage des Clients. Der Rumpf der Nummer unterscheidet dann, was genau schiefging.
401 Unauthorized heißt trotz seines Namens „nicht angemeldet“. Der Server kennt die Identität des Anfragenden nicht oder hält den Nachweis für ungültig; Authentifizierung ist genau dieses Prüfen, wer jemand ist, etwa per Login-Token. Deshalb schickt der Server im WWW-Authenticate-Header mit, welche Anmeldeverfahren er akzeptiert. Beispiel: Ein Aufruf von DELETE /users/42 ohne Token bekommt 401 samt Hinweis auf das Login-Verfahren.
403 Forbidden heißt „nicht erlaubt“. Der Server weiß zwar, wer anfragt, aber diese Person darf die Ressource nicht sehen; Autorisierung ist dieses Prüfen, was jemand tun darf. Ein erneutes Anmelden hilft nicht. Beispiel: Eine Nutzerin mit gültigem Token, aber ohne Admin-Rolle, ruft DELETE /users/42 auf und bekommt 403.
Der entscheidende Unterschied liegt also in der Identität: Bei 401 fehlt der Nachweis, wer anfragt, bei 403 ist der Nachweis da, aber die Erlaubnis fehlt. Verbreiteter Irrtum: Ein falsches Passwort gehört zur fehlenden Authentifizierung und damit zu 401, nicht zu 403.
Faustregel: Im eigenen Backend bei fehlendem oder ungültigem Token 401 zurückgeben, bei gültigem Token ohne ausreichende Rolle 403. Manche Backends antworten auf fehlende Berechtigung mit 404, um die Existenz einer Ressource nicht zu verraten; fürs Lernen genügt die klare Trennung.
401 heißt nicht „verboten“, sondern „erst anmelden“ – 403 heißt „angemeldet, aber nicht erlaubt“.
📌 401 = Anmeldung fehlt · 403 = Erlaubnis fehlt · WWW-Authenticate-Header
📚 Webentwicklung von Grund auf · Tag 2 von 30
#HTTP #REST #WebSecurity