Hlavní navigace

Přihlášení pomocí třetí strany: ověření identity s OAuth 2.0

6. 5. 2021
Doba čtení: 6 minut

Sdílet

 Autor: Depositphotos
Řada webů dnes nabízí možnost přihlášení přes některého z poskytovatelů identity. Je to bezpečné a hlavně pohodlné, protože není třeba si udržovat a hlídat vlastní databázi uživatelů. Jak to celé funguje?

Ve společnosti Seznam.cz není o dobré vývojáře nouze. Zpravidla se naplno věnují tvorbě, úpravám a provozování služeb, čas od času ale pracují také na takových produktech, které mohou být k užitku ostatním programátorům. Tyto aktivity pak typicky končí ve formě open-source software na GitHubu a občas se o nich dají přečíst zajímavé články. Jak se kolo dějin otáčí, věnujeme se jejich propagaci a zveřejňování s proměnlivou intenzitou. V minulých dnech nám přišlo užitečné nabídnout veřejnosti k dispozici možnost použití Seznamu jako poskytovatele uživatelské identity. Tuto službu jsme nazvali Přihlášení přes Seznam a ve zbytku článku se dozvíte, oč jde a jak to funguje.

K čemu se to hodí

Poskytovatel webových služeb ke své činnosti často potřebuje odlišovat jednotlivé návštěvníky a uživatelům zobrazovat personalizovaný obsah a funkcionality. Typicky se jedná o provozovatele e-shopů, ale i dalších placených služeb. Stejně tak může být přihlašování nutné třeba pro provozování komentářů, diskuzí či hodnocení obsahu. Technologicky pak má poskytovatel dvě hlavní možnosti, které může kombinovat. Tou první je udržovat si vlastní databázi registrovaných uživatelů a druhou nabídnutí přihlášení pomocí třetí strany.

Vlastní databáze uživatelů je tradiční řešení, které je zatíženo řadou komplikací. K nim patří netriviální implementace, nutnost ukládání přihlašovacích údajů a jejich zabezpečení, tvorba souvisejících procesů (změny a obnovy hesel nebo vícefázové ověřování) a také tvorba takového UI a UX, které uživatele procesem provede a nebude je příliš obtěžovat. Zrovna tento poslední bod je ve značném rozporu s pohodlím typického uživatele, který nechce mít účet na každém webu, který navštíví. Znamená to pro něj další evidenci přihlašovacích údajů a dochází tak často k velmi problematickému znovupoužívání hesel.

Oblíbenou volbou je proto dnes využití třetí strany pro přihlášení uživatele. Poskytovatelů takové služby máme širokou nabídku. V nějaké formě tuto funkcionalitu nabízí Facebook, Google, Twitter nebo GitHub. Víceméně je to každý velký hráč, který má k dispozici pořádnou databázi vlastních uživatelských účtů. Do tohoto konceptu Seznam velmi dobře zapadá, neboť má mnoho let zkušeností s evidencí několika milionů převážně českých uživatelů. Přišlo nám proto přímočaré nabídnout ostatním webům možnost přihlášení pomocí Seznamu tak, aby uživatel využil svůj existující Seznam účet a nemusel se znovu nikde registrovat. Rozšiřujeme tím v naší kotlině množinu poskytovatelů identity a je jen na jednotlivých provozovatelích, které všechny možnosti přihlášení na své službě nabídnou.

Jak to funguje

Služba Přihlášení přes Seznam je realizována pomocí standardu OAuth 2.0. Pokud je pro vás tato technologie dávno známá, pak můžete kapitolu přeskočit a přečíst si rovnou o naší implementaci. Pro méně zkušené uživatele je pak k dispozici tento jemný úvod do problematiky.

Možnost přihlášení pomocí třetí strany je především otázkou důvěry, respektive nedůvěry. Uživatel je rád, že si nemusí pro každý web zakládat účet, ale zároveň je dobře vyškolený v tom, že své přihlašovací údaje smí svěřovat pouze do rukou (čti formulářových políček) toho webu, kde si účet vytvořil. Je tedy otázka, jakým způsobem pak uživatel prokáže svou identitu na cizím webu, když jeho provozovateli oprávněně nechce svěřovat své citlivé údaje.

Nejlépe si to můžeme představit na příkladu pana Karkulky, poskytovatele spedičních služeb, který si donedávna vedl vlastní databázi uživatelů. Pro jejich ověřování však zvolil politováníhodný mechanismus „bezpečnostních otázek”, a stal se proto snadným cílem útoku známé hackerky Vlkové, která se úspěšně vydávala za jiného klienta a uhádla odpovědi na všechny jeho otázky. Zbytek této kauzy včetně nepříjemných důsledků, které pro pana Karkulku přinesla, nemusíme rozebírat. Faktem je, že od té doby už pan Karkulka nechce manuálně ověřovat identitu svých uživatelů. Rozhodl se proto využít služeb třetí strany.

Když nyní přijde za panem Karkulkou klient Bořivoj Babička a chce prokázat svoji totožnost, nastane autorizační proces dle standardu OAuth 2.0, který sestává z těchto čtyř klíčových kroků:

  1. Pan Karkulka nejprve pana Babičku přesměruje (doslova, pomocí HTTP přesměrování) na stránku poskytovatele identity. V této ukázce může hrát roli poskytovatele identity kupříkladu Babičkova dobrá známá Milada Myslivcová. V praxi je poskytovatelem identity právě Seznam, případně Facebook, Twitter a další.
  2. Na stránkách paní Myslivcové se pan Babička přihlásí. Forma toho, jak Myslivcová ověří jeho identitu, není předepsaná, je to implementační detail. Podstatou konceptu OAuth je právě skutečnost, že Karkulku vůbec nemusí zajímat, jestli a jak se Babička u Myslivcové prokáže. Možná jménem a heslem, možná ještě dalším faktorem, možná dobře uvařenou kávou. Ve webovém prostředí je dokonce pravděpodobné, že pan Babička již na webu paní Myslivcové přihlášen je, a tak pro svoji identifikaci nemusí udělat vůbec nic.
  3. Jakmile je Milada Myslivcová spokojená s prokázáním identity pana Babičky, vygeneruje pro něj jednorázové tajemství, kterému se v řeči OAuth říká autorizační kód. Toto tajemství není pro pana Babičku zajímavé, ale je nutné jej předat panu Karkulkovi. Myslivcová proto Babičku opět přesměruje, tentokrát na web pana Karkulky a do URL vloží tento autorizační kód. Tím se tajemství dostane ke Karkulkovi.
  4. Babička se nyní nachází na stránce pana Karkulky, kterému v HTTP požadavku přišel autorizační kód. Tento kód neobsahuje žádné užitečné informace, proto jej pan Karkulka vezme a na pozadípošle poskytovateli identity paní Myslivcové. Jedná se o server-server volání, ve kterém pan Karkulka odevzdá získaný autorizační kód a na jeho základě se od Myslivcové dozví identitu (typicky e-mailovou adresu) uživatele, který s tímto kódem přišel.

Tím proces končí, pan Karkulka zná identitu příchozího pana Babičky, aniž by se ho musel vyptávat na osobní údaje. Několik bodů, které stojí za zmínku:

  • Žádný z předepsaných bodů OAuth autorizace nevyžaduje cookies. Co se práce s protokolem týče, nutným předpokladem je možnost přesměrování (body 1 a 3) a práce s query string (body 3 a 4). V praxi pak většinou vídáme využití cookies pro udržení identity pana Babičky na webu paní Myslivcové. Stejně tak Karkulka si získanou informaci (bod 4) bude chtít pravděpodobně uchovat i pro další požadavky z prohlížeče pana Babičky. Proto si po úspěšné autorizaci vygeneruje nějaký identifikátor a vloží jej Babičkovi do cookies, nicméně toto už není součástí standardu OAuth.
  • V bodě 4 bývá zvykem, že Myslivcová v odpovědi na autorizační kód vystaví pro Karkulku ještě druhé tajemství, kterému se říká token. Toto tajemství si Karkulka může uschovat pro případ, že by chtěl v budoucnu znát ještě další data o uživateli. Na základě tokenu může od Myslivcové získat potřebné údaje, aniž by přitom musel Babička absolvovat všechna ta přesměrování a další výše popsané činnosti.

Jak to použít

Přihlášení přes Seznam je k dispozici zdarma všem uživatelům, kteří mají u Seznamu účet. Správa a organizace této služby probíhá na webu vyvojari.seznam.cz, který jsme oprášili a zvelebili. Zprovoznění a fungování pak probíhá v těchto krocích:

CS24 tip temata

  1. Provozovatel se přihlásí na stránce vyvojari.seznam.cz/oauth/admin, kde může prohlížet a spravovat ty weby, na kterých chce svým uživatelům nabídnout Přihlášení přes Seznam. Zde si zaregistruje novou službu a zadá jedno či více redirect URIs – webových adres, na které budou uživatelé přesměrováni s autorizačním kódem (třetí bod v ukázce s Karkulkou výše).
  2. Po registraci dostane provozovatel svou identifikaci, tvořenou dvojicí client_id a client_secret. Těmito hodnotami se následně prokazuje v jednotlivých krocích OAuth autorizace.
  3. Na svém webu provozovatel v rámci přihlášení přesměruje uživatele na vstupní URL (její skladba a parametry jsou k dispozici v Dokumentaci služby).
  4. Po dokončení autorizace Seznamem je uživatel přesměrován na zadané redirect URL a provozovatel musí serverovým voláním vyměnit autorizační kód za token a identifikaci uživatele.

Aktuálně není omezen počet služeb, na kterých může provozovatel nabízet Přihlášení přes Seznam. Jako identifikace uživatele je nabízena e-mailová adresa s tím, že v budoucnu může dojít k rozšíření poskytovaných údajů.

Přihlášení přes Seznam

Nedávný redesign stránek vyvojari.seznam.cz není jen oprášením roky nevyužívaného webu. Kromě výčtu Seznamem poskytovaných vývojářských služeb a projektů došlo také ke zveřejnění užitečné novinky Přihlášení přes Seznam, která může provozovatelům webů a zejména jejich uživatelům usnadnit komplikovaný proces přihlašování. Věříme, že tak přispíváme ke zvýšení bezpečnosti a komfortu všech našich uživatelů.

Autor článku

Senior programátor UI ve společnosti Seznam.cz.