Skip to content
Language:hu Author:Laborci Gergely
identity

Hitelesítés és jogosultságkezelés

Célok

A lecke végére el tudod különíteni a hitelesítést (ki vagy?) a jogosultságkezeléstől (mit tehetsz?), meg tudod különböztetni a 401 és a 403 válaszokat, és érted, miért nem jogosultság-ellenőrzés a gomb elrejtése.

Miért két külön kérdés?

A bejelentkezett felhasználó felismerése és egy művelet engedélyezése két külön kérdés. Ha a szolgáltatás összekeveri őket, két tipikus hiba jön: vagy mindenkit beenged, aki bejelentkezett („be van lépve, akkor biztos jogosult”), vagy a jogosult felhasználót is elutasítja. A hitelesítés (authentication) arra válaszol, hogy kinek az identitását fogadja el a szolgáltatás. A jogosultságkezelés (authorization) arra, hogy ez a szereplő mit tehet egy adott erőforrással.

Hallgató és oktató ugyanabban a rendszerben

A hallgató megnézheti a kurzusokat és jelentkezhet. Az oktató módosíthatja a saját kurzusa leírását. Mindketten sikeresen hitelesítik magukat, de eltérő műveletekre jogosultak. Az oktató sem módosíthat minden kurzust: a konkrét erőforrás és a kapcsolat is számít.

flowchart LR
    K[Kérés] --> H[Hitelesítés: ki?]
    H --> J[Jogosultság: teheti?]
    J --> V[Végrehajtás vagy elutasítás]

Az ábra két logikai ellenőrzést választ el. A sorrend a megvalósításban összetettebb lehet, de a döntési kérdések különböznek.

Hitelesítés: kinek hisszük a kérést?

A hitelesítés azt jelenti, hogy a szolgáltatás a kiválasztott módszer szerint elfogad egy identitásra vonatkozó állítást. A felhasználó többféleképp igazolhatja magát: jelszóval, külső identitásszolgáltatóval (7.5, 7.6), további tényezővel (8.4). A sikeres hitelesítés után a szolgáltatás munkamenetet hoz létre (7.2), hogy a későbbi kéréseknél ne kelljen újra megadni az igazolást. A hitelesítés nem azt jelenti, hogy a szolgáltatás tévedhetetlenül tud mindent a személyről; azt jelenti, hogy egy meghatározott módszer szerint elfogadja az identitást.

HTTP szinten a hitelesítés jelzése a 401 státuszkód, a kliens pedig az Authorization fejlécben küldi az igazolást. Az MDN szerint a 401 válasznak tartalmaznia kell egy WWW-Authenticate fejlécet, amely megmondja, milyen módszerrel lehet hitelesíteni (például Basic vagy Bearer). A Basic séma a felhasználónevet és a jelszót csak base64-gyel kódolja, ami nem titkosítás, ezért csak HTTPS-en szabad használni.

Jogosultság: mit tehet az adott szereplő?

A jogosultságkezelés döntés arról, hogy az ismert szereplő elvégezhet-e egy műveletet egy erőforráson. A döntés szempontja többféle lehet:

  • szerepkör alapján (hallgató, oktató, adminisztrátor);
  • erőforráshoz kötött feltétel alapján (az oktató a saját kurzusát szerkesztheti, a hallgató a saját jelentkezéseit láthatja);
  • környezet alapján (határidő, a kurzus állapota).

A szereplő, a művelet, az erőforrás és a környezet együtt számít. Kipróbálva a kipróbáló szerveren, ahol a hallgató csak a saját jelentkezéseit olvashatja, az oktató mindenkiét:

Anna (hallgató) belépve:
  GET /jelentkezesek/anna  -> 200 ["webprog"]
  GET /jelentkezesek/bela  -> 403 {"hiba":"nem jogosult"}

Oktató belépve:
  GET /jelentkezesek/bela  -> 200 ["adatbazisok"]

Nem belépve:
  GET /jelentkezesek/anna  -> 401 {"hiba":"nincs bejelentkezve"}
Szereplő Művelet Döntés
Hallgató Kurzuslista olvasása Megengedett
Hallgató Más hallgató jelentkezésének olvasása Elutasított (403)
Oktató Saját kurzus leírásának módosítása Feltételek mellett megengedett
Oktató Másik oktató kurzusának módosítása Elutasított
Névtelen látogató Bármely személyes adat Elutasított (401)

A táblázat oktatási példa, nem a Kurzuspont valódi szabályzata. A lényeg: a sikeres bejelentkezés után is minden releváns műveletnél vizsgálni kell a hozzáférést.

401 és 403

Helyzet Státuszkód Mit jelent? A kliens teendője
Nincs elfogadott identitás 401 Unauthorized Hiányzó vagy érvénytelen hitelesítés Jelentkezzen be (újra)
Ismert felhasználó, de nincs joga 403 Forbidden A szerver érti a kérést, de megtagadja Új bejelentkezés nem segít
A létezést sem akarják elárulni 404 Not Found Az MDN szerint a szerver 404-et is küldhet, hogy elrejtsen egy erőforrást a jogosulatlanok elől –

A 404 használata azért lehet hasznos, mert a 403 elárulja, hogy az erőforrás létezik. Nem minden erőforrásnál célszerű azonos részletességgel megmagyarázni az elutasítást.

Hozzáférés-ellenőrzés a rétegekben

A jogosultság döntése mindig az adat közelében, a szerveren történik. A böngésző, a CDN és a gyorsítótár nem hozhat jogosultsági döntést helyette. Ha egy közvetítő gyorsítótárból szolgálna ki személyes oldalt (4.4), a jogosultság-ellenőrzés kimaradna: ezért kell a személyre szabott válaszokat a gyorsítótárazásból kizárni (10. fejezet).

Végigvezetett példa: ki mit láthat a Kurzuspontban?

Erőforrás Névtelen Hallgató Oktató (saját kurzus) Adminisztrátor
Kurzusleírás olvashat olvashat olvashat és módosíthat módosíthat
Saját jelentkezések – olvashat, létrehozhat – olvashat
Más hallgató jelentkezése – tiltott a saját kurzusán olvashat olvashat
Jelentkezési lista a kurzushoz – – olvashat olvashat

Minden cella egy szerveroldali szabály. Ha az API-ban egyetlen végpontnál hiányzik az ellenőrzés, az a végpont megkerülhetővé teszi a felület összes tiltását.

Gyakori tévhitek

Állítás Pontosítás
„Aki be van jelentkezve, bármit megtehet.” A jogosultság műveletenként és erőforrásonként változik.
„A gomb elrejtése tiltja az API-hívást.” A szervernek külön ellenőriznie kell a jogosultságot.
„A hitelesítés és a jogosultság ugyanaz.” Az előbbi identitásra, az utóbbi műveleti engedélyre válaszol.
„A 401 és a 403 ugyanazt jelenti.” Az egyik hitelesítési, a másik jogosultsági elutasítás.
„A Basic hitelesítés titkosítja a jelszót.” Csak base64-gyel kódolja; HTTPS nélkül nem védett.

Röviden

  • A hitelesítés azt állapítja meg, ki a kérő; a jogosultságkezelés azt, hogy mit tehet.
  • A 401 hitelesítés hiányát, a 403 a jogosultság hiányát jelzi.
  • A jogosultsági döntés a szerveren, az erőforrás közelében történik; a felület elrejtése nem védelem.
  • A hibás hozzáférés-ellenőrzés a legfontosabb webes sebezhetőségek egyike.

Ellenőrző kérdések

  1. Miben különbözik a hitelesítés a jogosultságkezeléstől?
  2. Mikor 401 és mikor 403 a helyes válasz?
  3. Miért nem elég egy rejtett gomb egy művelet védelmére?
  4. Miért lehet a 404 is jogosultsági válasz?

Tanulási források

Prerequisites (2)

  • HTTP
  • munkamenet

Teaches (2)

  • hitelesítés
  • jogosultságkezelés