čtvrtek 1. září 2005

Odhlášení uživatele při použití Basic Authentication

Připadá Vám logické, že pokud se někam přihlásíte, měli byste mít možnost se i odhlásit? Pokud použijete pro autentizaci tzv. Basic Authentication (viz RFC 2617), představuje odhlášení takřka nepřekonatelný problém.

Lesk a bída Basic Authentication

Basic Authentication funguje tak, že při požadavku na resource, pro který je vyžadována autentizace, vrátí server prohlížeči hlavičku 401 Authentication Required. Prohlížeč si od uživatele vyžádá jméno a heslo, které zašle na server. Pokud je autentizace úspěšná, vrátí server požadovaný resource. Protože je HTTP protokol bezestavový, probíhá stejný scénář pro každý požadavek.

Aby byl uživatel ušetřen neustálého zadávání uživatelského jména a hesla, prohlížeč si je při prvním úspěšném ověření "zapamatuje" a s každým dalším požadavkem posílá automaticky. Ono "zapamatování" je specifické podle implementace prohlížeče, ale veskrze je omezeno na tzv. browser session, která vzniká při otevření prohlížeče a zaniká při jeho zavření. Problém je v tom, že neexistuje standardizovaný způsob, jak prohlížeč donutit, aby přihlašovací data již neposílal a tím došlo de facto k odhlášení.

Nefunkční workaround pro Internet Explorer

První způsob těží z toho, že prohlížeč při neúspěšné autentizaci požádá uživatele o nové zadání přihlašovacích údajů. Dále se využívá toho, že přihlašovací údaje mohou být součástí vlastní URL, a to ve formátu protokol://jmeno:heslo@server např. http://foo:hoo@acme.com/doSomething. Trik spočívá v tom, že při odhlášení se provede přesměrování, při kterém se do URL přidají neexistující přihlašovací informace. Prohlížeč tak zůstane ve stavu, kdy je zobrazen dialog pro přihlášení. Celý postup je popsán v článku Pavla Růžičky Odhlášení z HTTP autentizace.

Tento způsob skutečně fungoval, a to do doby, kdy velký bratr, pardon Microsoft, vydal kumulativní aktualizaci zabezpečení MS04-004 alias KB 834489(mimochodem standardně v SP2), která možnost odesílání přihlašovacích informaci v rámci URL posílá do věčných lovišť. Všechno podstatné k této záplatě osvětluje microsoftí pamflet K dispozici je aktualizace zabezpečení, která mění výchozí chování aplikace Internet Explorer při zpracování informací o uživateli v adresách URL protokolu HTTP a HTTPS. Musím říci, že po všech těch důvodech, které vedly k vydání tohoto patche, jsem zamáčknul slzu v oku.

Funkční workaround pro Internet Explorer

Naštěstí by to nebylo samo sebou, kdyby neexistoval jiný způsob odhlášení pro vyvolené uživatele Internet Exploreru. Díky aktivnímu skriptování v podobě technologie ActiveX můžeme využít informací získaných z microsoftího článku How To Clear Logon Credentials to Force Reauthentication. No a pokud máme někoho, kdo může ten kód zkompilovat, udělat package a podepsat ActiveX komponentu (díky NkD), tak je na půl vyhráno. Zbývá už "jenom" přesvědčit uživatele, že povolení ActiveX nerovná se otevření Pandořiny skříňky...