HTTP 401-fejl versus HTTP 403-fejl - statuskodesvar forklaret

Vi har dækket 403 (Forbidden) HTTP-fejlkoden i nogle detaljer før, men den har også en næsten identisk søskende.

Så hvad er præcis forskellen mellem statuskoderne 401 (Uautoriseret) og 403 (Forbudt)? Sikkert betyder de det samme? Lad os se nærmere på!

RFC-standarder

Den mest opdaterede RFC-standard, der definerer 401 (Uautoriseret), er RFC 7235

Statuskoden 401 (Uautoriseret) angiver, at anmodningen ikke er blevet anvendt, fordi den mangler gyldige godkendelsesoplysninger for målressourcen ... Brugeragenten KAN gentage anmodningen med et nyt eller udskiftet autorisationsoverskriftsfelt.

Mens 403 (Forbidden) senest er defineret i RFC 7231

403-statuskoden (Forbidden) angiver, at serveren forstod anmodningen, men nægter at godkende den ... Hvis der blev givet godkendelseslegitimationsoplysninger i anmodningen, ser serveren dem som utilstrækkelige til at give adgang.

Almindelige årsager

Som nævnt i den foregående artikel kan 403-fejlen opstå, når en bruger har logget ind, men de ikke har tilstrækkelige privilegier til at få adgang til den ønskede ressource. For eksempel kan en generisk bruger forsøge at indlæse en 'admin' rute.

Det mest åbenlyse tidspunkt, du vil støde på en 401-fejl, er på den anden side, når du slet ikke er logget ind eller har angivet den forkerte adgangskode.

Dette er de to mest almindelige årsager til dette par fejl.

Mindre almindelige årsager

Der er nogle tilfælde, hvor det dog ikke er lige så ligetil.

403 fejl kan opstå på grund af begrænsninger, der ikke helt afhænger af den loggede brugers legitimationsoplysninger.

For eksempel kan en server have låst bestemte ressourcer ned for kun at tillade adgang fra et foruddefineret interval af IP-adresser eller kan bruge geo-blokering. Sidstnævnte kan potentielt omgås med en VPN.

401 fejl kan opstå, selvom brugeren indtaster de korrekte legitimationsoplysninger. Dette er sjældent og kan være noget, du kun virkelig støder på, mens du udvikler dine egne godkendte bagenden. Men hvis autorisationsoverskriften er forkert, returnerer den en 401.

For eksempel har du muligvis et JWT (JSON Web Token), du vil medtage i anmodningsoverskriften, som forventer formatet Authorization: Bearer eyJhbGci......yJV_adQssw5c. Hvis du skulle glemme ordet 'Bearer' før JWT, ville du støde på 401-fejlen.

Jeg er selv kommet ind på dette problem, da jeg testede API'er under udvikling med Postman og glemte den korrekte syntaks for auth-headere!

Det er det

Jeg håber, at dette rydder op i enhver forvirring omkring disse meget lignende fejl.

Hvis du fandt dette nyttigt eller ønsker at udfordre eller udvide noget, der er rejst her, er du velkommen til at kontakte mig på Twitter @JacksonBates.