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:


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://claimid.com/ejr/) je OpenID identita a že klient má komunikovat s adresou https://openid.claimid.com/server. 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/ejr“. 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.misantrop.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.myopenid.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.

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:heslo. 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.
Přehled komentářů