OpenID: Historie, terminologie a mechanismus autentizace

V tomto článku si popíšeme podrobněji na fungování autentizační metody OpenID. Řekneme si něco o její historii, ujednotíme si terminologii používanou ve světě OpenID a ukážeme si mechanismus uživatelské autentizace. Podíváme se také na dva zajímavé rysy, které ukazují možnou sílu OpenID.

Seriál: Moderní internetové autentizační metody (7 dílů)

  1. Moderní internetové autentizační metody 19.12.2008
  2. Porovnání moderních autentizačních metod 23.12.2008
  3. OpenID: Historie, terminologie a mechanismus autentizace 30.12.2008
  4. Implementace přihlašování pomocí OpenID 6.1.2009
  5. OpenID: Identity, aliasy a vlastní poskytovatel 13.1.2009
  6. Implementace přihlašování pomocí Live ID 20.1.2009
  7. Webové autentizační metody: Kuriozity a novinky 27.1.2009

Historie verzí OpenID

První verze specifikace OpenID (verze 1.0) obsahovala některé nejednoznačnosti, kvůli kterým byla brána jako neformální návrh. Problémy této neformální specifikace opravila specifikace 1.1, která se tak stala vlastně první prakticky použitelnou OpenID specifikací.

V prosinci 2007 byla podepsána a vydána specifikace OpenID 2.0, která je v současné době aktuální. Verze 2.0 přinesla několik vylepšení, mimo jiné například:

  • Jednotnou podporu pro rozšíření OpenID protokolu
  • Podporu větších požadavků a odpovědí, které by se nevešly do URL (zavedena možnost předávání dat metodou HTTP POST)
  • Možnost zadat identifikátor OpenID providera namísto identifikátoru uživatele
  • Podporu obecných rozšiřovacích atributů

Většina klientských knihoven a velké množství poskytovatelů podporuje OpenID 2.0, přesto pokud chceme implementovat podporu přihlašování přes OpenID, měli bychom počítat i s poskytovateli, kteří implementují protokol 1.1. Oficiální OpenID knihovny tuto podmínku naštěstí splňují.

Zajímavosti OpenID protokolu 2.0

Ve výše uvedeném popisu novinek, které přináší OpenID 2.0, jsou naznačeny dvě věci, o nichž se domnívám, že zaslouží samostatnou zmínku. Jedná se o rozšíření a identifikátory poskytovatelů.

Simple Registration Extension

Již se specifikací OpenID 1.1 přišlo i jedno zajímavé standardizované rozšíření protokolu, nazývané Simple Registration Extension. OpenID totiž v čisté podobě nenabízí nic víc než ověření identifikátoru (tedy informaci „Ano, tento uživatel je oprávněn prokazovat se tímto identifikátorem“) – tedy v podstatě totéž, co nabízí např. ověření Live ID. Simple Registration přidává k tomuto mechanismu dodatečné informace, které si může klient vyžádat a poskytovatel mu je může předat – jsou to pole pojmenované jako openid.sreg.*, která obsahují jméno, přezdívku, adresu a podobné informace (viz popis Simple Registration Extension). Na tomto místě je vhodné připomenout, že jde o volitelné informace, které poskytovatel mít nemusí nebo je nemusí předat, pokud si to uživatel nepřeje.

V OpenID 2.0 je mechanismus rozšíření dále zobecněn a upraven – je přidán koncept jmenných prostorů, který řeší případné konflikty názvů různých rozšíření.

Identifikátor poskytovatele

OpenID 2.0 rovněž přišlo s novinkou, zvanou identifikátor poskytovatele. Jde o jakýsi zástupný identifikátor, odkazující na poskytovatele. Pokud uživatel zadá takový identifikátor, je před procesem zjišťování (Discovery) poskytovatel nejprve dotázán na uživatelův identifikátor; autentizace pak pokračuje s tímto identifikátorem. Tento koncept přináší některé zajímavé možnosti:

  • Poskytovatel může třeba všem svým uživatelům dát stejný identifikátor. Například root.cz by mohl poskytnout všem svým uživatelům univerzální identitu openid.root.cz, se kterou by se mohl každý zaregistrovaný uživatel přihlásit na libovolné stránce, která podporuje OpenID.
  • Je možné například vytvořit „anonymní poskytovatele“, kteří budou pro jednoho uživatele posílat každé službě unikátní OpenID. Uživatel se tedy bude vždy přihlašovat např. jako „anonymni-openid.com“ a poskytovatel mu pro každou zaregistrovanou službu vytvoří unikátní identifikátor ve tvaru f5ad8qx2yw5.a­nonymni-openid.com. Znemožní se tím sledování uživatelů podle jejich identifikátoru, což jistě mnozí ocení.

Terminologie

Před tím, než se vůbec podíváme, jak OpenID funguje, si musíme ujasnit některé termíny. Česká terminologie v této oblasti není zatím nijak ustálená, proto použiji buď překlad nebo opis, a u termínů uvedu originální tvar, dohledatelný v OpenID specifikaci.

Identifikátor
V terminologii OIS nazýván Identifier. Je to buď URI s protokolem http nebo https (URL), nebo XRI (o tom podrobněji až někdy jindy, zájemce odkazuji na specifikaci).
Poskytovatel
Též Provider, v terminologii OIS OpenID provider. Server, který poskytuje Klientovi potvrzení o tom, že konkrétnímu uživateli patří konkrétní identifikátor. Někdy se lze setkat s termínem Správce identit nebo poskytovatel identit. Zkratka: OP
OP Endpoint
Celým jménem OpenID Provider Endpoint URL, neboli koncový bod OP – absolutní http nebo https URL, na kterém poskytovatel přijímá požadavky od klientů.
Klient
Též Konzument, v originální terminologii OIS je nazýván Relying Party. Tento výraz nemá ustálený český termín; v doslovném překladu znamená „ta strana, co se spoléhá“ – myšleno spoléhá se na ověření identity od OP. Nejčastěji jde o web, který implementoval možnost přístupu k vlastním službám přes OpenID. Ve specifikaci je používána zkratka RP.
Uživatelský klient (Prohlížeč)
V terminologii OIS nazýván User-Agent. Jde o webový klient, který implementuje protokol HTTP/1.1 (v praxi nejčastěji webový prohlížeč). Aby se označení nepletlo s OpenID klientem, tak budeme používat označení „Prohlížeč“.
OP identifikátor
Identifikátor poskytovatele.
Uživatelem poskytnutý identifikátor
Neboli User-Supplied Identifier USID – identifikátor, který uživatel zadal na webu RP (nebo který si vybral na stránkách Poskytovatele). V průběhu přihlašování může uživatel zadat buď svůj identifikátor, nebo OP identifikátor – v takovém případě mu Poskytovatel nabídne možnost vybrat si identifikátor, jakým chce být přihlášen.
Přidělený identifikátor
V originální terminologii OIS pod názvem Claimed identifier. Identifikátor, o němž uživatel prohlašuje, že mu patří, že je jeho. Celý mechanismus OpenID slouží k ověření tohoto nároku, tohoto tvrzení. Přiděleným identifikátorem je míněn USID po normalizaci (pokud byla zadána URL adresa) nebo CanonicalID, pokud byl zadán XRI.

Ověření krok za krokem

OpenID ověření probíhá v několika krocích, kdy spolu komunikují prohlížeč, poskytovatel a klient. Na začátku je požadavek od uživatele, který zadá svůj identifikátor (USID), na konci je informace o tom, zda se dotyčný uživatel tímto identifikátorem prokazuje oprávněně.

Schema průběhu autentizace pomocí OpenID

Přehled kroků probíhajících při autentizaci pomocí OpenID. Jednotlivé kroky jsou popsány dále v textu.

  1. V prvním kroku uživatel – slovy specifikace – sdělí (pomocí prohlížeče) svůj identifikátor RP. Laicky (a míň šroubovaně) řečeno: Napíše svůj identifikátor do příslušného políčka ve formuláři na klientových stránkách a odešle.
  2. Klient normalizuje (viz specifikace) dodaný identifikátor. Po jeho normalizaci se snaží získat adresu OP Endpointu zjišťovacím procesem (ve specifikaci nazývaný Discovery)
  3. (Volitelný) Klient a poskytovatel si vytvoří tzv. přiřazení (Association, viz specifikace) – pomocí Diffie-Hellman algoritmu (RFC2631) si vymění klíč, kterým poskytovatel bude podepisovat odpovědi a klient ověřovat jejich pravost. Tento krok odstraňuje nutnost dalších dotazů na ověření podpisu při každém autentizačním požadavku či odpovědi.
  4. Klient přesměruje uživatelův prohlížeč na stránky poskytovatele buď pomocí HTTP redirektu nebo JavaScriptem a v URL předá autentizační požadavek (viz specifikace)
  5. Poskytovatel ověří, zda je uživatel oprávněn prokazovat se daným identifikátorem a zda si to opravdu přeje. Standardně OpenID nijak nepředepisuje způsob, jakým to má poskytovatel dělat – jestli ověří uživatele jménem a heslem, SMS kódem, elektronickým klíčem či biometrickými údaji, to záleží jen na něm. V budoucnu bude ale možné pomocí rozšíření PAPE požadovat vyšší nároky na ověření – např. požadovat vícenásobné potvrzení identity či požadovat, aby alespoň jeden způsob ověření byl fyzický (biometrické údaje, hardwarový klíč apod.) Specifikace PAPE je nyní ve stádiu návrhu a členové OpenID nadace o ní právě v těchto dnech hlasují.
  6. Poskytovatel přesměruje uživatelův prohlížeč zpět na klientovy stránky a zároveň předá (v URL) informaci o tom, zda je autentizace potvrzena, nebo zda selhala.
  7. Klient ověří informace předané Poskytovatelem: Zkontroluje návratové URL, informace o endpointu, zkontroluje nonce kód (unikátní kód požadavku) a ověří podpis, buď pomocí společného klíče, dohodnutého v kroku 3 (přiřazení klient-poskytovatel), nebo dodatečným dotazem na poskytovatele.

Závěr

Na závěr stručné shrnutí: V současnosti je aktuální OpenID verze 2.0. OpenID ověření probíhá v několika krocích, kterých se účastní uživatel, klientská služba a poskytovatel OpenID. Specifikace nestanovuje, jakým způsobem má poskytovatel OpenID ověřit, zda je uživatel oprávněný prokazovat se danou identitou; v blízké budoucnosti však bude možné požadovat určitou úroveň tohoto ověření pomocí rozšíření PAPE. Předávání informací o uživateli není základní součástí protokolu, je jeho rozšířením. Protokol verze 2.0 má možnosti, jak zabránit sledování uživatelů podle jejich identifikátoru, a zároveň zachovat jednotné přihlášení.

Pokračování příště

Příště konečně odbočíme od šedivé teorie a na příkladu si ukážeme, jak lze v několika snadných krocích implementovat OpenID přihlašování na web.

Kolik OpenId identit používáte?

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Komentáře: 28

Přehled komentářů

Ja. RE: OpenID: Historie, terminologie a mechanismus autentizace
danaketh RE: OpenID: Historie, terminologie a mechanismus autentizace
Anonym RE: OpenID: Historie, terminologie a mechanismus autentizace
Christof RE: OpenID: Historie, terminologie a mechanismus autentizace
Anonym RE: OpenID: Historie, terminologie a mechanismus autentizace
Christof RE: OpenID: Historie, terminologie a mechanismus autentizace
cubeek OpenId a osobní údaje
danaketh Re: OpenId a osobní údaje
cubeek Re: OpenId a osobní údaje
danaketh Re: OpenId a osobní údaje
Jan R. Re: OpenId a osobní údaje
Look Smog Re: OpenId a osobní údaje
benzin Re: OpenId a osobní údaje
u1 Re: OpenId a osobní údaje
Jan Kodera Re: OpenId a osobní údaje
Martin Malý Re: OpenId a osobní údaje
Martin Hassman Re: OpenId a osobní údaje
Martin Malý Re: OpenId a osobní údaje
benzin Re: OpenId a osobní údaje
Martin Malý Re: OpenId a osobní údaje
benzin Re: OpenId a osobní údaje
cubeek Re: OpenId a osobní údaje
LN RE: OpenID: Historie, terminologie a mechanismus autentizace
benzin RE: OpenID: Historie, terminologie a mechanismus autentizace
Martin Malý RE: OpenID: Historie, terminologie a mechanismus autentizace
benzin RE: OpenID: Historie, terminologie a mechanismus autentizace
Martin Malý RE: OpenID: Historie, terminologie a mechanismus autentizace
benzin RE: OpenID: Historie, terminologie a mechanismus autentizace
Zdroj: https://www.zdrojak.cz/?p=2904