Přeskočit na hlavní obsah

Autentizace

Dlouhou odmlku v publikování na PHP Guru jsem se pro začátek rozhodl prolomit sérií článků o autentizaci. Autentizace je klíčovou součástí každé pokročilejší aplikace. Špatně realizovaná autentizace může v lepším případě odradit mnohé návštěvníky, v horším představovat vážnou bezpečnostní díru do systému. Základním principům a pravidlům by měl proto rozumět každý vývojář, i kdyby nakonec třeba jen využíval některou z mnoha existujících hotových knihoven.

Původně zde měl být jen jeden článek rozebírající metodu Challenge/Response, který jsem kdysi komusi nedopatřením slíbil. Pak jsem ale zjistil, že na internetu, a zejména tom českém, je velice poskrovnu jakýchkoliv ucelených informací o autentizaci obecně. Proto jsem se rozhodl pojmout celé téma takto zeširoka. Takže i na to Challenge/Response zanedlouho dojde. Na úvod ale trocha nudné, leč nutné terminologie.

Co je autentizace

Autentizace je obecně proces, při kterém se ověřuje identita protější strany. Neboli zda je uživatel či entita na druhé straně drátu skutečně tím, za koho se vydává.

Obecně se rozlišuje autentizace uživatelská a entitní. K uživatelské autentizaci dochází například při přihlašování zadáním uživatelského jména a hesla. Poté server zašle klientovi session token, což je nejčastěji náhodně vygenerovaný identifikátor aktuální session. Ten si prohlížeč obvykle uchovává v podobě cookie ve své paměti. Společně s každým dalším požadavkem pak prohlížeč zasílá i tento session token, čímž je prováděna autentizace entitní. Entitní autentizace přichází na řadu například i při trvalém přihlášení či tokenových ochranách před CSRF útoky.

Uživatelskou autentizaci lze provádět na základě různých kritérií:

  • uživatel něco zná – například heslo, šifrovací klíč, PIN;
  • uživatel něco má – například identifikační kartu, privátní klíč;
  • uživatel se něčím vyznačuje – typicky biometriky, tedy otisk prstu, obraz sítnice, vzorek hlasu;
  • uživatel něco umí – například správně odpovědět na náhodný kontrolní dotaz.

V celém dalším seriálu se budeme bavit ponejvíce o autentizaci uživatelským jménem a heslem, což je nejčastější případ. Nicméně značná část principů platí obecně pro jakýkoliv typ autentizace.

Co není autentizace

Proces ověřování identity uživatele se v českém prostředí také často nazývá autentifikace nebo autentikace. Osobně bych se těmto alternativním a možná i nesprávným termínům doporučoval vyhýbat. Ostatně, na toto téma již bylo napsáno dosti.

Autentizace se také často zaměňuje s autorizací. Jsou to ale naprosto rozdílné pojmy. Zatímco při autentizaci se ověřuje identita uživatele, tak při autorizaci se kontroluje, zda (již autentizovaný) uživatel má dostatečná oprávnění pro přístup k určitému souboru či pro provedené určité akce.