HTTP 401 -virhe vs. HTTP 403 -virhe - tilakoodivasteet selitetty

Olemme aiemmin käsitelleet yksityiskohtaisesti 403 (kielletty) HTTP-virhekoodia, mutta sillä on myös lähes identtinen sisarus.

Joten mikä on ero 401 (luvaton) ja 403 (kielletty) tilakoodien välillä? Varmasti he tarkoittavat samaa? Katsotaanpa tarkemmin!

RFC-standardit

Ajantasaisin RFC-standardi, joka määrittelee 401 (luvaton), on RFC 7235

401 (Luvaton) -tilakoodi osoittaa, että pyyntöä ei ole käytetty, koska sillä ei ole kelvollisia todennusvaltuuksia kohderesurssiin ... Käyttäjäagentti VOI toistaa pyynnön uudella tai korvatulla Valtuutus-otsikkokentällä.

403 (Kielletty) on määritelty viimeksi RFC 7231: ssä

403 (Kielletty) -tilakoodi osoittaa, että palvelin ymmärsi pyynnön, mutta kieltäytyi valtuuttamasta sitä ... Jos pyynnössä annettiin todennustiedot, palvelin pitää niitä riittämättöminä pääsyn myöntämiseen.

Yleisiä syitä

Kuten edellisessä artikkelissa mainittiin, 403-virhe voi johtua, kun käyttäjä on kirjautunut sisään, mutta hänellä ei ole riittäviä käyttöoikeuksia pyydetyn resurssin käyttämiseen. Esimerkiksi yleinen käyttäjä voi yrittää ladata järjestelmänvalvojan reitin.

Ilmeisin aika 401-virheen kohdalla on toisaalta silloin, kun et ole kirjautunut sisään ollenkaan tai antanut väärän salasanan.

Nämä ovat kaksi yleisintä syytä tähän virhepariin.

Harvinaisemmat syyt

On kuitenkin tapauksia, joissa se ei kuitenkaan ole aivan yhtä suoraviivaista.

403-virheitä voi tapahtua rajoitusten takia, jotka eivät riipu täysin kirjautuneen käyttäjän tunnistetiedoista.

Esimerkiksi palvelin voi olla lukinnut tietyt resurssit salliakseen pääsyn vain ennalta määritetyltä IP-osoitteiden alueelta, tai se voi käyttää maantieteellistä estoa. Jälkimmäinen voidaan mahdollisesti kiertää VPN: llä.

401-virheitä voi tapahtua, vaikka käyttäjä syöttäisi oikeat tunnistetiedot. Tämä on harvinaista, ja saatat olla jotain, jonka todella kohtaat vain kehittäessäsi omia todennettuja takapääsi. Mutta jos valtuutusotsikko on väärin muotoiltu, se palauttaa 401-arvon.

Sinulla voi olla esimerkiksi JWT (JSON Web Token), jonka haluat sisällyttää pyynnön otsikkoon, joka odottaa muotoa Authorization: Bearer eyJhbGci......yJV_adQssw5c. Jos unohdat sanan 'kantaja' ennen JWT: tä, kohtaat 401-virheen.

Olen itse törmännyt tähän ongelmaan testatessani Postmanin kanssa kehitteillä olevia sovellusliittymiä ja unohtamalla oikean syntaksin todennuksen otsikoille!

Se siitä

Toivon, että tämä poistaa kaikki epäselvyydet näiden hyvin samankaltaisten virheiden ympärillä.

Jos pidit tästä hyödyllisenä tai haluat haastaa tai laajentaa jotain täällä esille tuotua, ota rohkeasti yhteyttä minuun Twitterissä @JacksonBates.