OpenID: Identity, aliasy a vlastní poskytovatel

OpenID identifikátory mají tvar URL adresy, která odkazuje na stránku OpenID identity u providera. V tomto článku si ukážeme, jak lze vytvořit alias a používat jako identifikátor např. adresu vlastní stránky. Taky si ukážeme, jak lze jednoduše nainstalovat a provozovat vlastní OpenID server pro jednoho uživatele a být tak třeba svým vlastním poskytovatelem.

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

Jak vybrat poskytovatele?

V diskusích k minulým článkům zaznívalo často téma spolehlivosti OpenID poskytovatelů. Je pravda, že technologie OpenID je poměrně citlivá na tuto problematiku a že vybrat si špatného poskytovatele znamená mít zaděláno na možný problém. Naštěstí je OpenID providerů mnoho, takže si lze vybrat takového, u něhož je riziko problémů co možná nejmenší.

Při výběru mohou pomoci různé seznamy providerů (OpenID Providers Directory nebo Where to get an OpenID) či srovnání poskytovatelů. Osobně používám MyOpenID a nezaznamenal jsem žádné problémy. Co se týče českých poskytovatelů, zde je situace o něco horší. Donedávna jediný český OpenID provider OpenID.cz měl od počátku nejrůznější problémy s dostupností, spolehlivostí či kvalitou služeb, někteří uživatelé si stěžovali, že server delší dobu nefungoval a provozovatel nereagoval na dotazy apod. Dnes stránky sice fungují, ale provozovatel nabízí celou doménu ke koupi, takže bych si případné založení účtu na openid.cz rozmyslel, minimálně do doby, než bude jasné, jak se situace vyvine. Naštěstí je situace už o něco lepší a uživatelé, kteří nevládnou cizím jazykem, mohou využít Seznam jako OpenID poskytovatele.

Alias pro OpenID identitu

Vybrali jsme si důvěryhodného poskytovatele, založili jsme si u něj účet, ale chtěli bychom mít nějaký hezčí identifikátor. Pokud máme i nějaké vlastní webové stránky, tak je vytvoření vlastního identifikátoru otázka několika minut. Slouží k tomu technika, nazývaná OpenID alias či OpenID delegát. Ukážeme si, jak takový alias vytvořit, ale nejprve si řekneme, jak funguje.

V předchozích dílech seriálu jsme si řekli o procesu ověřování identity. Jeden z prvních kroků (po normalizaci identifikátoru) je takzvaný proces zjišťování, neboli Discovery. Teď je pravá chvíle říct si, co se vlastně zjišťuje, kde a jak…

Více o procesu Discovery

OpenID identifikátor je vlastně URL nějaké stránky. Někteří jste si jistě zkusili tu adresu zadat přímo do prohlížeče a podívat se, co to udělá. Výsledek je (možná překvapivě) prostý: Je tam nějaká stránka a na ní nějaké informace. Někdy může být informací víc (např. u ClaimID), někdy míň (třeba u MyOpenID), někdy tam může být třeba jen prosté oznámení, že „toto je OpenID identita“ – ale na první pohled tam není nic zvláštního. Stačí se ale podívat do zdrojového kódu, a je jasno:

Zdrojový kód OpenID HTML stránky
Zdrojový kód OpenID HTML stránky

OpenID stránka obsahuje v hlavičce informace o tom, kde je „server endpoint“ pro danou identitu, tedy na jaké adrese má klient komunikovat se serverem. Krom toho může volitelně obsahovat i samotný OpenID identifikátor. Příklad:

<link rel="openid.server" href="https://openid.claimid.com/server" /> 

znamená, že tato stránka (konkrétně šlo o http://clai­mid.com/ejr/) je OpenID identita a že klient má komunikovat s adresou https://openid­.claimid.com/ser­ver. openid.server označuje tedy endpoint OpenID poskytovatele – konkrétně pro protokol verze 1.

Protokol OpenID 2 přidal druhý odkaz s názvem „openid2.provider“, ale význam zůstal stejný:

<link rel="openid.server" href="http://www.myopenid.com/server" />
<link rel="openid2.provider" href="http://www.myopenid.com/server" /> 

informuje klienta, že jde o OpenID identitu, která funguje jak s protokolem 1.1, tak s protokolem 2.

Link na openid.server, resp. openid2.provider, je na stránce OpenID identity povinný. Pokud se v hlavičce stránky tyto odkazy nevyskytují, je takové URL odmítnuto jako neplatná OpenID identita. Jako volitelnou informaci lze doplnit upřesnění identifikátoru pro server, pokud např. používá vnitřně jiný tvar než je dané URL. Např. už zmiňovaný ClaimID uvádí toto:

<link rel="openid.server" href="https://openid.claimid.com/server" />
<link rel="openid.delegate" href="https://openid.claimid.com/ejr" /> 

tedy identita s URL „http://claimid­.com/ejr“ je interně ověřována jako „https://openid­.claimid.com/ej­r“. Pro OpenID 1 se používá openid.delegate, pro OpenID 2 openid2.local_id.

Alias

Pokud vás teď napadlo, že by šlo vložit tyto odkazy do libovolné stránky a „nasměrovat“ ji tak vlastně na libovolného poskytovatele OpenID, tak jste právě pochopili princip OpenID aliasů. Opravdu lze vložit tyto odkazy do libovolné stránky, a udělat z ní tak platný OpenID identifikátor. Nejlepší bude uvést rovnou příklad, a s dovolením použiji svůj identifikátor.

Mám stránky na adrese http://www.mi­santrop.info a chtěl jsem tuto adresu použít jako OpenID identifikátor. Vybral jsem si poskytovatele MyOpenID a založil jsem si u něj účet http://adent.my­openid.com. MyOpenID má v nápovědě přímo sekci Jak použít vlastní URL, a podle ní lze postupovat:

Moje uživatelské jméno na myopenid.com je adent, takže jsem ho dopsal na patřičná místa a do HTML kódu své stránky jsem vložil následující:

<link rel="openid.server" href="http://www.myopenid.com/server" />
<link rel="openid.delegate" href="http://adent.myopenid.com/" />
<link rel="openid2.provider" href="http://www.myopenid.com/server" />
<link rel="openid2.local_id" href="http://adent.myopenid.com" />
<meta http-equiv="X-XRDS-Location" content="http://www.myopenid.com/xrds?username=adent.myopenid.com" /> 

(Poslední řádek obsahuje informace pro služby, které používají autentizační protokol Yadis – tím se ale nebudeme zabývat. XRDS location můžeme vynechat bez vlivu na funkčnost identity.)

Libovolná stránka, do níž tyto řádky vložím, se tak stane OpenID identitou. Pokud takovou identitu někde použiji, bude vyhodnocena jako správná a já budu vyzván, abych potvrdil, že disponuji právy k „adent.myopenid­.com“. Pomocí aliasu mohu tedy použít adresu svých stránek jako OpenID identitu kdekoli. Alias má navíc jednu pozitivní vlastnost: Pokud se někdy v budoucnu rozhodnete změnit poskytovatele, stačí pouze přepsat tyto informace a budete moct dál používat původní alias, tedy adresu své stránky.

Alias u dalších providerů

Stejný alias lze vytvořit pro jakéhokoli providera – jde o vlastnost protokolu, nikoli o službu OpenID poskytovatele. Poskytovatelé většinou nabízí návod, jak si alias vytvořit. Pokud ne, tak potřebné informace pro openid.server resp. openid2.provider vyčtete ze zdrojového kódu svého OpenID identifikátoru, a jako delegate a local_id můžete zkusit identifikátor, co vám přidělil poskytovatel. Tyto informace vložíte jako tagy LINK do hlavičky své stránky. Pro OpenID verze 1 to jsou odkazy openid.server a openid.delegate, pro OpenID 2 pak openid2.provider a openid2.local_id.

Při psaní tohoto článku jsem chtěl zkusit popsaný postup pro identitu na Seznamu. Nápověda je velmi skoupá a o této možnosti se nezmiňuje, což je škoda. Navíc stránka OpenID identity na Seznamu obsahuje META tag refresh, takže nelze do jejího zdrojového kódu kouknout běžným způsobem. Proto jsem udělal jednoduchou pomůcku, která zjistí všechny potřebné údaje: Seznam OpenID alias discovery. Stačí zadat váš identifikátor. Skript si načte veřejně dostupnou stránku vaší identity a vypíše vám údaje, které můžete rovnou vložit do své stránky. Např. pro identitu oidtest vypadají údaje takto. Pokud skript vypíše chybu při spojení, je pravděpodobně vytížen. Zkuste to za chvíli znovu.

Seznam OpenID alias

Z tohoto obrázku je hezky vidět, že Seznam používá nějaké „lidsky nečitelné“ interní identifikátory, a jejich xyz.id.seznam.cz je rovněž vlastně OpenID alias.

Vlastní OpenID provider

Lidem, kterým vadí skutečnost, že OpenID provider má k dispozici informace o tom, jaké stránky navštěvují, nabízí OpenID vcelku neobvyklou možnost: Stát se svým vlastním providerem. Stačí k tomu pouze vlastní veřejně dostupný server a na něm spuštěný nějaký skriptovací jazyk (PHP, Python, …). Připravené OpenID servery pro různá prostředí naleznete například v seznamu na OpenID Wiki. V tomto seznamu naleznete nejrůznější instalace, od předpřipravených víceuživatelských providerských skriptů až po lehké jednouživatelské instalace.

Pro nás jsou v tuto chvíli zajímavé především malé „jednouživatelské“ servery – alespoň nepředpokládám, že mezi čtenáři je někdo, kdo plánuje spouštět vlastní službu OpenID providera. Z těchto jednoduchých serverů je pravděpodobně nejpoužívanější phpMyID. phpMyID podporuje protokol verze 1.1 a několik hodnot u rozšíření Simple Registration.

Instalace phpMyID spočívá v prostém nakopírování souborů na server a v upravení hodnot v souboru MyID.config.php. Zde je třeba zadat jméno a heslo, ovšem to nikoli v plaintextu, ale jako MD5 hash řetězce jméno:oblast:hes­lo. Oblast (realm) je defaultně „phpMyID“, i tento řetězec je možno v nastavení změnit. Podrobnosti k instalaci jsou popsány v souboru README.

phpMyID si standardně ověřuje uživatele pomocí HTTP autentizace Digest (tj. neposílá se heslo v otevřeném textu). Samo sebou si můžete instalaci upravit tak, aby vám bezpečnostně vyhovovala – můžete si doplnit autentizaci nějakou fyzikální metodou, můžete si dopsat např. mechanismus „challenge – response“, můžete vše provozovat na https, ostatně fantazii se meze nekladou a zabezpečení takového jednouživatelského serveru je plně ve vašich rukou.

Samo sebou není phpMyID jediným jednouživatelským serverem. Za pozornost jistě stojí i další projekty (SimpleID, Prairie, …) Věřím, že si ze široké škály každý může vybrat takový software, který je blízký jeho potřebám a upravit si do perfektní podoby. Ostatně vždy máme možnost napsat si vlastní implementaci – technologie je otevřená a dokumentovaná.

Jednouživatelské servery jsou zajímavou alternativou k veřejným OpenID poskytovatelům, např. pro uživatele, co z principu nedůvěřují cizím službám nebo pro uživatele, kteří vyžadují nestandardní služby; stejně tak mohou být základem pro malé několikauživatelské OpenID servery či pro vaše vlastní pokusy s touto technologií (např. na tomto základu postavené anonymní identity atd).

Závěr

Technologie OpenID je, jak jsme si ukázali, navržena velmi flexibilně a pokrývá celou škálu oblastí autentizace, od obecného mechanismu „pro každého“ až po opravdu speciální případy použití. Věřím, že tento článek vás alespoň trochu přesvědčil o tom, že možnosti OpenID jsou opravdu široké, že uživatelé nejsou omezeni jen na jednoho poskytovatele a „nějakou“ identitu, ale že mají poměrně velkou míru svobody.

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: 16

Přehled komentářů

ondra.novacisko.cz Škoda, že OpenID začíná být přeplácané
Martin Malý Re: Škoda, že OpenID začíná být přeplácané
burlog Re: Škoda, že OpenID začíná být přeplácané
ondra.novacisko.cz OpenID seznamu
burlog XRDS
Martin Malý Re: XRDS
drsnacek OpenID vs. digit. certifikat
Jan Tvrdík Re: OpenID vs. digit. certifikat
drsnacek Re: OpenID vs. digit. certifikat
Martin Malý Re: OpenID vs. digit. certifikat
petr_p Re: OpenID vs. digit. certifikat
drsnacek Re: OpenID vs. digit. certifikat
drsnacek Re: OpenID vs. digit. certifikat
Martin Malý Re: OpenID vs. digit. certifikat
xzajox Re: OpenID vs. digit. certifikat
Magnesium2 Alias
Zdroj: https://www.zdrojak.cz/?p=2914