Při vývoji webových stránek je občas nutné schovat je jako celek za nějaké jednoduché přihlášení. Může to být z testovacích důvodů nebo v situacích, kdy se nevyplatí vyvinout složitější autentikační mechanismus.
Nastavení HTTP Basic Authentication je velmi jednoduché a rychlé. V podstatě nám stačí pouze vygenerovat si soubor s přihlašovacími údaji a vložit pár řádků do konfigurace Apache - ať už přímo do definice Virtualhostu nebo do souboru .htaccess.
Soubor s přihlašovacími údaji vytvoříme příkazem htpasswd přímo na serveru (online generátory nepoužívejte – heslo byste tím poslali cizí službě):
$ htpasswd -cB .htpasswd username
Příkaz si heslo dvakrát vyžádá a soubor .htpasswd vytvoří přímo v aktuálním adresáři – heslo tak nezůstane v historii příkazů. Použité parametry -cB definují:
- c - požadovaný soubor chceme vytvořit; pokud už existuje, bude přepsán
- B - heslo uložíme jako hash bcrypt
Poté již zbývá pouze nastavit vyžadování autentikace v Apache serveru, kde musí být zapnutý auth_basic modul. Pokud jej nemáme zapnutý a máme root přístup, lze jej jednoduše zapnout příkazem:
a2enmod auth_basic
Vlastní kód pro nastavení autentikace je možné vložit do definice Virtualhostu do direktivy <Directory>:
<Directory /some/path>
...
AuthType Basic
AuthName "Login required"
AuthUserFile /absolute/path/to/.htpasswd
Require valid-user
# Pokud chcete povolit přihlášení pouze konkrétnímu uživateli
# Require user username
</Directory>
Je důležité nastavit cestu k autentikačnímu souboru jako absolutní.
Pokud jej budeme vkládat do .htaccessu, je nutné zkontrolovat, že pro daný <Directory> máme povolenou změnu nastavení v htaccessu. Direktivu AllowOverride musíme nastavit buďto na AuthConfig nebo All:
<Directory /some/path>
...
AllowOverride AuthConfig
</Directory>
Poté stačí do .htaccessu přidat:
AuthType Basic
AuthName "Login required"
AuthUserFile /absolute/path/to/.htpasswd
Require valid-user
Basic Authentication v Apache serveru nabízí samozřejmě mnohem více funkcí a možností nastavení. Kompletní dokumentaci si lze projít v oficiální dokumentaci