HTTPQUERY
Deutsch

401 Unauthorized

Verwendung

Trifft ein 401-Unauthorized-Fehler ein, versteht der Client, dass gültige Anmeldedaten erforderlich sind, bevor der Zugriff auf die angeforderte Ressource gewährt wird. Der Client muss sich zunächst anmelden oder Zugangsdaten als Teil der HTTP-Anfrage übermitteln. Auch bereits mit der Anfrage gesendete Zugangsdaten sind nicht gültig. Dieser Status unterscheidet sich von 403 Forbidden, das dem Client mitteilt, dass die Aktion unabhängig von den Zugangsdaten nicht erlaubt ist.

Hinweis

Die Bezeichnung “Unauthorized” ist historisch bedingt irreführend. 401 bedeutet, dass der Client nicht authentifiziert ist: Die Zugangsdaten fehlen oder sind ungültig. Authentifizierte Benutzer, denen die Berechtigung für die angeforderte Aktion fehlt, erhalten stattdessen 403 Forbidden. Die Benennung stammt noch aus der ursprünglichen HTTP/1.0-Spezifikation.

Sendet der Server eine 401-Unauthorized-Antwort, enthält diese den Antwort-Header WWW-Authenticate. Er informiert den Client über die zulässigen Autorisierungsmethoden. Die IANA pflegt eine Liste standardisierter Authentifizierungsschemata, die sich in Sicherheit und Verbreitung unterscheiden. Gängige Authentifizierungsschemata:

Basic

Überträgt Zugangsdaten als Paare aus ID und Passwort.

Bearer

Auch als Token-Authentifizierung bekannt; sie beruht auf Sicherheits-Tokens, die der Server erzeugt und nach erfolgreicher Anmeldung an den Client zurückgibt. Der Client sendet diese Tokens in nachfolgenden Anfragen, um auf geschützte Ressourcen zuzugreifen. Bei Bedarf fügt der Server Fehlerdetails hinzu: WWW-Authenticate: Bearer error=“invalid_token”, error_description=“Token expired”.

Digest

Ein Challenge-Response-Protokoll zur Authentifizierung von Ressourcenanfragen.

HOBA

Kurzform für HTTP Origin-Bound Authentication, ein Schema, bei dem der Server keine Passwörter speichern muss und das dadurch widerstandsfähig gegen Phishing-Angriffe ist.

Mutual

Auch als beidseitige Authentifizierung bekannt, ähnlich den Schemata Basic und Digest, mit dem Unterschied, dass der Server garantiert das verschlüsselte Passwort des Clients kennt. Client und Server authentifizieren einander, bevor die Interaktion fortgesetzt wird.

AWS4-HMAC-SHA256

Ein Authentifizierungsalgorithmus, der Authentifizierungsinformationen für die Amazon Web Services AWS S3 API Reference bereitstellt.

Mehrere Authentifizierungsmethoden gibt der Server in mehreren Zeilen oder in einer einzelnen kommagetrennten Zeile an. Verfügt der Client über die erforderlichen Zugangsdaten, sendet er sie über den Anfrage-Header Authorization.

SEO-Auswirkung

Suchmaschinen wie Google indexieren keine URL, die den Status 401 Unauthorized zurückgibt. Zuvor indexierte URLs, die diesen Statuscode zurückgeben, werden aus den Suchergebnissen entfernt. Seiten mit diesem Code verbrauchen kein Crawl-Budget. Verwenden Sie 401 nicht, um Googlebot auszubremsen. Nur 429 verringert die Crawl-Rate.

Beispiel

Der Client fordert eine Ressource an, und der Server antwortet mit 401 Unauthorized, um anzuzeigen, dass die Ressource geschützt ist. Der Server gibt an, sowohl Basic- als auch Mutual-Autorisierung zu unterstützen. Der Client antwortet mit einem Paar aus username:password nach dem Basic-Authentifizierungsprotokoll, angegeben im Authorization-Header. Anschließend überträgt der Server die angeforderte Ressource.

Erste Anfrage

GET /documents/tech-news HTTP/1.1
Host: example.com

Erste Antwort

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Documents"
WWW-Authenticate: Mutual

Nächste Anfrage, mit Authorization

GET /documents/tech-news HTTP/1.1
Host: example.com
Authorization: Basic RXhhbXBsZTphaQ==

Abschließende Antwort

HTTP/1.1 200 OK
Content-Type: application/pdf
Content-Length: 25000

<PDF document included in message body>

Behebung

Ein 401 Unauthorized bedeutet, dass der Server gültige Zugangsdaten verlangt, bevor er den Zugriff gewährt.

Prüfen Sie den WWW-Authenticate-Header in der Antwort. Dieser Header gibt das erwartete Authentifizierungsschema an (Basic, Bearer, Digest usw.). Stimmen Sie die Client-Anfrage auf das geforderte Schema ab. Öffnen Sie die Browser-DevTools, wählen Sie den Tab Network und suchen Sie unter Response Headers den Eintrag WWW-Authenticate.

Überprüfen Sie die Zugangsdaten. Vergewissern Sie sich, dass Benutzername und Passwort, API-Schlüssel oder Bearer-Token korrekt sind. Ein einziger Tippfehler oder ein Leerzeichen im Wert des Authorization-Headers führt zur Ablehnung. Testen Sie die Zugangsdaten isoliert mit curl -H “Authorization: Bearer ”, um Probleme auf Anwendungsebene auszuschließen.

Stellen Sie sicher, dass das Token nicht abgelaufen ist. Bearer-Tokens und Sitzungs-Tokens haben eine begrenzte Lebensdauer. Dekodieren Sie ein JWT in einem lokalen Debugger, um den exp-Claim zu prüfen. Erzeugen oder erneuern Sie das Access-Token über den Authentifizierungsanbieter.

Passen Sie das Format des Authorization-Headers an das Schema an. Basic erwartet ein Base64-kodiertes Paar aus username:password. Bearer erwartet eine reine Token-Zeichenkette. Ein falsches Format löst selbst bei gültigen Zugangsdaten ein 401 aus. Ein häufiger Fehler ist das Weglassen des Schema-Präfixes (wenn das Token allein ohne Bearer gesendet wird).

Erzeugen Sie die Zugangsdaten bei Bedarf neu. Rotieren Sie den API-Schlüssel oder fordern Sie ein neues Token vom Autorisierungsserver an. Widerrufene oder ungültig gemachte Zugangsdaten erzeugen stets diesen Status.

Leeren Sie Browser-Cache und Cookies. Veraltete Sitzungs-Cookies oder zwischengespeicherte Authorization-Header stehen im Konflikt mit aktualisierten Zugangsdaten. Löschen Sie die gespeicherten Daten und authentifizieren Sie sich erneut.

Prüfen Sie die serverseitige Authentifizierungskonfiguration. Apache .htpasswd-Dateien, nginx auth_basic-Direktiven und .htaccess AuthType-Regeln steuern den Zugriff. Überprüfen Sie den Pfad zur Zugangsdatendatei, den realm-Namen und das Vorhandensein des Benutzereintrags. In nginx:

auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;

In Apache:

AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Überprüfen Sie OAuth-Scopes und Audience-Claims. Ein Access-Token mit korrekten Zugangsdaten, aber falschen Scopes oder einem aud-Claim, der nicht zum Ressourcenserver passt, löst weiterhin 401 aus. Stellen Sie sicher, dass das Token für die Ziel-API ausgestellt wurde.

Code-Referenzen

.NET

HttpStatusCode.Unauthorized

Rust

http::StatusCode::UNAUTHORIZED

Rails

:unauthorized

Go

http.StatusUnauthorized

Symfony

Response::HTTP_UNAUTHORIZED

Python3.5+

http.HTTPStatus.UNAUTHORIZED

Java

java.net.HttpURLConnection.HTTP_UNAUTHORIZED

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_UNAUTHORIZED

Angular

@angular/common/http/HttpStatusCode.Unauthorized