OAuth

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 21. prosince 2020; kontroly vyžadují 26 úprav .
OAuth
název OAuth
 Mediální soubory na Wikimedia Commons

OAuth  je otevřený autorizační protokol (schéma) , který poskytuje třetí straně omezený přístup k chráněným zdrojům uživatele, aniž by jí (třetí straně) přenášel přihlašovací jméno a heslo [1] [2] .

Práce na protokolu byly zahájeny v listopadu 2006 a poslední verze OAuth 1.0 byla schválena 4. prosince 2007. Jako následný vývoj se v roce 2010 objevil protokol OAuth 2.0, jehož poslední verze byla publikována v říjnu 2012 jako RFC 6749 .

Aplikace

Jedním z problémů autentizace a bezpečnosti informací je, že uživatelé obvykle používají několik různých služeb (například na Google, Twitter, Apple atd.), a tedy několik účtů s vlastními přihlašovacími údaji a hesly. Uživatelé tedy potřebují uchovávat a chránit mnoho přihlašovacích údajů a hesel. Vzhledem k tomu, že každá ze služeb má svůj vlastní bezpečnostní systém s vlastními zranitelnostmi a nedostatky, je toto vše na úkor pohodlí a bezpečnosti uživatelů. Pokud například uživatelé používají stejná hesla pro různé služby, pak se po získání přístupu k jednomu z účtů útočníkům značně zjednoduší postup hackování dalších účtů [3] .

Dvoufázové ověření (například Google Authenticator ) lze použít ke zvýšení bezpečnosti, když je pro potvrzení použita jiná uživatelská služba (například když je pro ověření na webu vyžadován kód zaslaný na mobilní telefon ). S tímto přístupem se výrazně snižuje pravděpodobnost hacknutí. Klíčovou vlastností používání OAuth je, že pokud má uživatel dobře zabezpečený účet, tak se pomocí něj a technologie OAuth může autentizovat k dalším službám, přičemž uživatel nemusí prozradit své hlavní heslo. Například uživatel, který chce poskytnout online službě pro tisk fotografií přístup k fotografiím ze svého účtu na Facebooku , nemusí službě poskytovat heslo k tomuto účtu. Místo toho předá autorizaci Facebooku, který (se svolením uživatele nebo správce služby) již poskytuje online tiskové službě požadovaný přístup k fotografiím [3] .

Historie

OAuth 1.0

OAuth se objevil v listopadu 2006 během vývoje protokolu OpenID pro mikroblogovací službu Twitter Blaine Cookem .  Spolu s Chrisem Messinou hledal způsob , jak pomocí OpenID poskytnout přístup k Twitter API , aniž by službě udával heslo. Ve spolupráci se spolutvůrcem OpenID Davidem Recordonem analyzovali funkčnost OpenID a také proprietární autorizační protokoly, jako jsou Flickr Auth , Google AuthSub a Yahoo! BBAuth , načež došli k závěru, že je potřeba nový otevřený protokol [4] .    

V dubnu 2007 byla vytvořena skupina inženýrů, kteří pracovali na jeho vytvoření. Na jeho práci se podíleli zaměstnanci společností Google a AOL (která zároveň zavedla svůj vlastní protokol OpenAuth ). Finální verze jádra protokolu OAuth 1.0 byla vydána 4. prosince 2007. V roce 2008 probíhaly práce na standardizaci protokolu v Internet Engineering Council [4] .

Dne 15. dubna 2009 nabídl Twitter svým uživatelům řešení, které umožňuje webům a službám třetích stran přístup k jejich účtům. Jmenoval se „Přihlásit se pomocí Twitteru“ a byl založen na protokolu OAuth. Tato událost spustila první rozsáhlou studii zranitelnosti protokolu a o několik dní později byla objevena potenciální zranitelnost ovlivňující všechny existující implementace OAuth. Poté, 23. dubna, byl vývojářskou komunitou vydán první bezpečnostní doplněk protokolu, který byl zahrnut do aktualizované specifikace OAuth Core 1.0 Revize A zveřejněné 24. června. V dubnu 2010 byla vydána bílá kniha RFC 5849 o standardu OAuth [4] .

OAuth 2.0

V roce 2010 byly zahájeny práce na nové verzi protokolu OAuth 2.0, která nebyla zpětně kompatibilní s OAuth 1.0 [1] . V říjnu 2012 byl rámec pro OAuth 2.0 publikován v RFC 6749 a použití nosiče tokenů v RFC 6750 .

Pro vytvoření OAuth 2.0 bylo několik předpokladů. Za prvé, OAuth je poměrně netriviální pro použití na straně klienta. Jedním z cílů při vývoji nového OAuth je usnadnit vývoj klientských aplikací. Za druhé, navzdory implementaci tří metod (nazývaných toky) deklarovaných ve standardu pro získání tokenu (  jedinečného identifikátoru) pro autorizaci: pro webové aplikace, desktopové klienty a mobilní klienty jsou ve skutečnosti všechny tři metody sloučeny do jedné. A za třetí, protokol se ukázal jako špatně škálovatelný. Kromě nových streamů do něj byly přidány [5] [6] :

V tuto chvíli OAuth 2.0 využívá velké množství služeb, jako je Google , Instagram , Facebook , VKontakte a další.

Pozdější vývoj

V červenci 2012 Eran Hammer, současný editor standardu OAuth 2.0, oznámil svou rezignaci po třech letech práce na novém standardu a požádal o odstranění jeho jména ze specifikací. O svých názorech hovořil na svých webových stránkách [7] a později přednesl přednášku [8] . David Recordon také později vyškrtl své jméno ze specifikace bez udání důvodů [ 9] .  Dick Hardt se stal editorem standardu OAuth2.0 a navzdory názorům Erana Hammera byl rámec OAuth 2.0 publikován v RFC 6749 v říjnu 2012 [1] .

Srovnání s jinými protokoly

Výhody

Při použití autorizace OAuth uživatel nepřenáší své přihlašovací jméno a heslo k chráněným zdrojům přímo do aplikace [3] . Proto:

V případě autorizace bez použití protokolu OAuth musí uživatel zaslat své přihlašovací jméno a heslo. Tato metoda má další nevýhody [3] :

Rozdíl od OpenID

Ačkoli OAuth a OpenID mají mnoho společného, ​​OAuth je protokol sám o sobě a nemá nic společného s OpenID [10] :

Popis protokolů OAuth

Základní pojmy používané v protokolech a příklady jejich použití.

Klient, server a vlastník zdroje

OAuth 1.0 definuje tři role: klient, server a vlastník zdroje. Tyto tři role jsou přítomny v jakékoli operaci OAuth, v některých případech je klient také vlastníkem prostředku. Původní verze specifikace používá pro tyto role jinou sadu termínů: spotřebitel (klient), služba (server) a uživatel (vlastník zdroje) [11] . V protokolu OAuth 2.0 došlo k oddělení rolí serveru: autorizační server a server, který uchovává chráněné zdroje, jsou přiděleny samostatně [6] .

Metody pro vytváření podpisů

OAuth podporuje 3 metody podpisu používané k podepisování a ověřování požadavků: PLAINTEXT , HMAC - SHA1 a RSA - SHA1 . Použití PLAINTEXTu je triviální a jeho výpočet zabere podstatně méně času, ale může být zabezpečen pouze přes HTTPS nebo podobné zabezpečené kanály. HMAC - SHA1 nabízí jednoduchý a obecný algoritmus, který je dostupný na většině platforem, ale ne na všech starších zařízeních, a používá symetrický sdílený klíč. RSA - SHA1 poskytuje vylepšené zabezpečení pomocí páru klíčů, ale je složitější a vyžaduje generování klíčů [12] .

Timestamp and Nonce

Aby se zabránilo hrozbě opětovného použití požadavku, používá protokol OAuth označení nonce a časové razítko . Termín "nonce" se používá k označení jednorázového kódu, což je náhodná sada písmen a čísel a je navržen tak, aby jednoznačně identifikoval požadavek. Jedinečný identifikátor v požadavku umožňuje poskytovateli služby zabránit jeho opětovnému použití. Tento přístup je implementován generováním jedinečného řetězce pro každý požadavek odeslaný na server klientem. Aby se zabránilo opětovnému použití požadavků, server MUSÍ ukládat přijaté nonce [12] .

Ukládání všech přijatých nonces však může být pro server velmi nákladné. Aby se zabránilo nadměrné režii úložiště v OAuth, je ke každému požadavku přidáno časové razítko, které serveru umožňuje ukládat nonce pouze po určenou omezenou dobu. Po obdržení požadavku se štítkem dříve, než je povoleno, jej server odmítne [12] .

Síly a žetony

OAuth 1.0 a OAuth 2.0 používají tři typy oprávnění: přihlašovací údaje klienta ( spotřebitelský  klíč a tajné nebo klientské přihlašovací údaje ) ,  dočasné přihlašovací údaje ( token požadavku a tajné nebo dočasné přihlašovací údaje ) a tokeny ( přístupový token a tajné nebo anglické přihlašovací údaje ) [13] [ 3] .     

Přihlašovací údaje klienta se používají k ověření klienta. Server může klientům poskytovat speciální služby, jako je omezení volného přístupu nebo poskytování podrobnějších informací vlastníkovi zdroje o klientech, kteří se pokoušejí přistupovat k chráněným zdrojům. V některých případech nejsou přihlašovací údaje klienta zabezpečené a lze je použít pouze pro informační účely, například v aplikacích pro stolní počítače.

Token se používá místo jména a hesla vlastníka zdroje. Vlastník zdroje nezveřejňuje své přihlašovací údaje klientovi, ale umožňuje serveru vydat klientovi token – speciální třídu přihlašovacích údajů, která klientovi poskytuje určité omezené možnosti. Klient používá token pro přístup k chráněnému zdroji, aniž by znal heslo vlastníka zdroje. Token se skládá z digitálního podpisu, obvykle (ale ne vždy) náhodné sady písmen a čísel, která je jedinečná a kryptograficky silná, a klíče k ochraně tokenu před neoprávněným použitím. Token je omezený z hlediska oprávnění a trvání a může být vlastníkem zdroje kdykoli odvolán, aniž by to ovlivnilo tokeny vydávané jiným klientům [13] .

Proces autorizace OAuth také používá sadu dočasných pověření, která se používají během fáze žádosti o autorizaci. Aby bylo možné uspokojit různé druhy klientů (webové rozhraní, desktop, mobilní zařízení atd.), dočasná oprávnění nabízejí další flexibilitu a zabezpečení [13] .

OAuth 1.0

Vysvětlíme si, jak funguje protokol OAuth 1.0 na příkladu [13] . Předpokládejme, že uživatel (vlastník zdroje) chce vytisknout své fotografie (zdroje) nahrané na photos.example.net (server) pomocí tiskové služby "printer.example.net" (klient).

  1. Klient odešle na server požadavek prostřednictvím protokolu HTTPS , který obsahuje ID klienta, časové razítko, adresu zpětného volání (používá se k vrácení tokenu), typ použitého digitálního podpisu a samotný podpis.
  2. Server potvrdí požadavek a odpoví klientovi tokenem požadavku  a částí sdíleného tajemství.
  3. Klient předá token vlastníkovi zdroje (uživateli) a přesměruje jej na server k ověření.
  4. Server po obdržení tokenu od uživatele požádá o jeho přihlašovací jméno a heslo a v případě úspěšné autentizace požádá uživatele o potvrzení přístupu klienta ke zdrojům (dojde k autorizaci), načež je uživatel serverem přesměrován. klientovi.
  5. Klient odešle token požadavku na server prostřednictvím protokolu TLS a požádá o přístup ke zdrojům.
  6. Server potvrdí požadavek a odpoví klientovi novým přístupovým tokenem . 
  7. Pomocí přístupového tokenu klient přistupuje k serveru pro zdroje.
  8. Server potvrdí požadavek a poskytne zdroje.

OAuth 2.0

Protokol OAuth 2.0 není zpětně kompatibilní s protokolem OAuth 1.0 [1] . Spíše než doplnit OAuth 1.0 bylo rozhodnuto vyvinout jiný protokol [10] . Proto je způsob, jakým OAuth 1.0 a OAuth 2.0 fungují, odlišný. Ve standardu OAuth 2.0 jsou tedy popsány následující toky (scénáře interakce stran) [1] :

Je to nejkratší protokolový tok: uživatel je nejprve přesměrován klientem na server, aby umožnil přístup ke zdrojům, a po udělení přístupu je přesměrován serverem zpět na klienta [10] . Rozdíl mezi tímto tokem a implicitním přístupovým tokem spočívá v dodatečném kroku autentizace klienta [10] . Rozdíly mezi tímto tokem a výše uvedeným příkladem jsou následující: v kroku 2 server kromě přístupového tokenu, který má omezenou životnost, vydá obnovovací token; v kroku 8 server zkontroluje, zda je přístupový token platný (ve smyslu vypršení životnosti), a v závislosti na tom buď udělí přístup ke zdrojům, nebo vyžaduje obnovení přístupového tokenu (které je poskytováno po předložení obnovovacího tokenu ). V tomto toku vlastník zdroje poskytne klientovi přihlašovací jméno a heslo, předá je serveru a obdrží token pro přístup ke zdrojům. Navzdory skutečnosti, že tento způsob provozu poněkud odporuje koncepci vytváření protokolu, je popsán ve specifikaci. V tomto režimu provozu protokolu server poskytuje přístupový token poté, co klient předá svého uživatele a heslo, které bylo předem nastaveno autorizačním serverem (specifikace neuvádí jak). Klient ve skutečnosti okamžitě projde jak autorizací, tak autentizací.

OAuth podporuje dvě metody ověřování zpráv od klienta: HMAC - SHA1 a RSA - SHA1 . Je možné posílat zprávy bez podpisu, pak je v poli typu podpisu uvedeno „ prostý text “. V tomto případě ale podle specifikace musí být spojení mezi klientem a serverem navázáno přes protokol SSL nebo TLS [13] .

Poznámky

  1. 1 2 3 4 5 D. Hardt, Ed. Autorizační rámec OAuth 2.0 . Úvod  (anglicky) . Internet Engineering Task Force (říjen 2012) . Získáno 30. října 2015. Archivováno z originálu 14. května 2016.
  2. E. Hammer-Lahav, Ed. Protokol OAuth 1.0   // IETF . - 2010. - Duben. — ISSN 2070-1721 .
  3. 1 2 3 4 5 6 Gibbons K. , Raw J. O. , Curran K. Hodnocení bezpečnosti rámce OAuth 2.0  // Správa informací a počítačová bezpečnostEmerald Publishing Limited , 2014. – Vol . 22, Iss. 3. - ISSN 0968-5227 ; 1758-5805
  4. 1 2 3 Eran Hammer. Průvodce OAuth 1.0. Historie  (anglicky) . Získáno 30. října 2015. Archivováno z originálu 25. října 2015.
  5. Eran Hammer. Představujeme OAuth 2.0  (  mrtvý odkaz) . hueniverse.com. Datum přístupu: 30. října 2015. Archivováno z originálu 15. ledna 2011.
  6. 1 2 Ryan Boyd. Úvod // Začínáme s OAuth 2.0 . - 1. vyd. - 1005 Gravenstein Highway North, Sebastopol: O'Reilly Media, Inc., 2012. - S. 67. - 9-12, 23-24 p. - ISBN 978-1-449-31160-5 .
  7. Eran Hammer. OAuth 2.0 a Cesta do pekla  (anglicky)  (odkaz není k dispozici) . hueniverse (26. července 2012). Získáno 14. června 2017. Archivováno z originálu 25. března 2013.
  8. Eran Hammer. OAuth 2.0 – Ohlédnutí a  pokračování . hueniverse. Datum přístupu: 30. října 2015. Archivováno z originálu 22. října 2015.
  9. D. Hardt. Autorizační rámec OAuth 2.0: Použití tokenu nosiče draft-ietf-oauth-v2-bearer-23 . Příloha B. Historie dokumentu  ( 1. srpna 2012) . Datum přístupu: 30. října 2015. Archivováno z originálu 16. listopadu 2015.
  10. 1 2 3 4 5 6 7 Chen E. Y. , Pei Y. , Chen S. , Tian Y. , Kotcher R. , Tague P. OAuth zbaven mýtů pro vývojáře mobilních aplikací  // Sborník z konference ACM SIGSAC o - NYC : ACM , 2014. - S. 892-903. - ISBN 978-1-4503-2957-6 - doi:10.1145/2660267.2660323
  11. Eran Hammer. Terminologie  (anglicky) . hueniverse. Datum přístupu: 31. října 2015. Archivováno z originálu 1. listopadu 2015.
  12. 1 2 3 Eran Hammer. Bezpečnostní rámec  . hueniverse. Získáno 31. října 2015. Archivováno z originálu 5. listopadu 2015.
  13. 1 2 3 4 5 E. Hammer-Lahav, Ed. Protokol OAuth 1.0  . Internet Engineering Task Force . Získáno 8. listopadu 2015. Archivováno z originálu 10. listopadu 2015.

Odkazy