Krijg je 401 Unauthorized of ‘Authorization Required’? De server weet niet wie je bent. Lees het verschil met 403 en los basic auth- en API-tokenproblemen stap voor stap op.
Een 401 Unauthorized betekent ondanks de naam: niet geauthenticeerd. De server weet niet wie je bent, omdat je geen inloggegevens meestuurde of omdat die niet kloppen. Hij hoort er een header WWW-Authenticate bij te sturen die zegt hoe je je moet aanmelden, bijvoorbeeld Basic (gebruikersnaam en wachtwoord) of Bearer (een token).
Bij websites zie je 401 vooral bij basic auth: de browser toont een klein inlogvenster van de server zelf, niet een inlogpagina van de website. Dit wordt vaak gebruikt om een testomgeving of beheermap af te schermen. Klik je dat venster weg of typ je verkeerde gegevens, dan volgt de 401.
Bij API’s en apps betekent 401 meestal dat het token ontbreekt, verkeerd is meegegeven of is verlopen. Ook een proxy of webserver die de Authorization-header onderweg weggooit, geeft precies hetzelfde resultaat: de applicatie ziet geen inloggegevens en antwoordt met 401.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Controleer gebruikersnaam en wachtwoord, ook op hoofdletters en een eventueel ingeschakelde Caps Lock. Bij basic auth zijn dat de gegevens van de afgeschermde map, niet je gewone account op de website. Vraag ze na bij wie de site of testomgeving beheert.
Browsers onthouden basic-auth-gegevens tot je de browser helemaal afsluit. Typte je eerder een fout wachtwoord, sluit dan alle vensters en probeer opnieuw, of test in een privévenster. Bij een website met eigen inlogpagina helpt het om de cookies van die site te wissen en opnieuw in te loggen.
Krijgt een koppeling 401, kijk dan of de sleutel of het token nog geldig is en of het in de juiste header staat. Veel API’s verwachten Authorization: Bearer <token>. Tokens hebben vaak een korte geldigheid; je app moet dan met een refresh-token een nieuw token ophalen. Ook een verkeerde systeemklok kan een token ongeldig laten lijken.
curl -si https://api.voorbeeld.nl/v1/me \
-H "Authorization: Bearer $TOKEN"De header WWW-Authenticate vertelt welke methode de server verwacht. Bij een verlopen of ongeldig token sturen veel API’s daar een extra toelichting in mee, zoals error="invalid_token".
curl -si https://www.voorbeeld.nl/beheer/ | grep -i -E '^(HTTP|www-authenticate)'Bij nginx staan auth_basic en auth_basic_user_file in het server- of locationblok. Bij Apache gebruik je AuthType, AuthUserFile en Require valid-user. Het pad naar het wachtwoordbestand moet absoluut zijn en leesbaar voor de webserver. Met htpasswd (uit apache2-utils) maak of wijzig je gebruikers.
# nginx
location /beheer/ {
auth_basic "Afgeschermd";
auth_basic_user_file /etc/nginx/.htpasswd;
}
# Apache (.htaccess of serverconfiguratie)
AuthType Basic
AuthName "Afgeschermd"
AuthUserFile /var/www/.htpasswd
Require valid-user
# gebruiker toevoegen (zonder -c, anders wordt het bestand overschreven)
sudo htpasswd /etc/nginx/.htpasswd gebruikersnaamDraait PHP via FastCGI achter Apache, dan wordt de Authorization-header standaard niet altijd doorgegeven aan PHP. De applicatie ziet dan geen token en geeft 401, terwijl de aanvraag goed was. Met CGIPassAuth On of een rewrite-regel geef je de header door. Zit er een proxy of load balancer voor, controleer dan ook of die de header niet verwijdert.
# Apache, in .htaccess of de vhost
CGIPassAuth On
# alternatief met mod_rewrite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]Geef 401 als iemand niet of verkeerd is aangemeld, en stuur er een WWW-Authenticate-header bij. Geef 403 als de gebruiker wel bekend is, maar geen recht heeft op deze actie. Een duidelijke foutmelding in de body helpt de aanroeper: ‘token verlopen’ is iets anders dan ‘geen toegang tot dit project’.
Let op: Gebruik basic auth alleen via https. Bij http gaan gebruikersnaam en wachtwoord zonder versleuteling over het netwerk; base64 is geen beveiliging.
De twee worden vaak door elkaar gebruikt, maar ze betekenen iets anders:
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Bij 401 weet de server niet wie je bent: inloggen ontbreekt of mislukt. Bij 403 weet hij het wel, maar heb je geen toestemming.
De gebruikersnaam of het wachtwoord klopt niet, of de server kan het wachtwoordbestand niet lezen. Controleer de gegevens en, als beheerder, het pad en de rechten van het .htpasswd-bestand.
Controleer of het token of de API-sleutel is verlopen of ingetrokken, en of hij in de juiste header wordt meegestuurd. Maak zo nodig een nieuwe sleutel aan in het systeem waarmee je koppelt.
Ja, dat is daar geschikt voor, mits de site via https bereikbaar is. Het houdt ook zoekmachines buiten.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · Gratis website-scan · Alle oplossingen