OAuth 2.0

Logo protokołu OAuth

OAuth 2.0 – standardowy protokół autoryzacji dostępu, skoncentrowany na ułatwieniu użytkownikowi przepływu autoryzacji dla aplikacji internetowych, aplikacji, telefonów komórkowych oraz innych urządzeń, na których można się zalogować na określone strony internetowe. Protokół OAuth nie wymaga od internauty podawania hasła w momencie logowania, ale zamiast tego używa tokenów autoryzacyjnych(inne języki) (ciąg znaków określających określony zakres, czas życia oraz inne atrybuty dostępu), które mają na celu potwierdzenie tożsamości pomiędzy dostawcami usług a konsumentami. Ogólnie rzecz biorąc jest to protokół, który pozwala na zatwierdzenie współpracy między jedną stroną, aplikacją a drugą w Twoim imieniu, lecz bez podawania haseł. Z takiego rozwiązania korzystają między innymi Facebook, Twitter, Microsoft, Google czy Amazon, chcąc tym samym ułatwić udostępnianie informacji.

Oficjalna strona projektu OAuth 2.0 wyróżniła dokumenty omawiającego specyfikę tego protokołu. Dokument RFC 6749 ↓ jest podstawowym produktem IETF (Internet Engineering Task Force) OAuth Working Group. Docelowo OAuth 2.0 udziela dostępu innemu podmiotowi na przykładzie poniższego praktycznego opisu sytuacji, w której udzielane zostaje prawo do odczytu danych z profilu Facebook bądź Google. Typowy scenariusz opiera się na następujących krokach:

  1. Aplikacja bądź strona internetowa zamierza pozyskać dane użytkownika, w związku z czym pobiera je od zewnętrznego dostawcy tożsamości oraz przekierowuje do serwera autoryzacyjnego
  2. Takowy serwer informuje użytkownika o możliwości uzyskania dostępu do określonych danych (np. dane personalne, adres e-mail).
  3. Decyzja użytkownika polegająca na zaakceptowaniu wymagań aplikacji/strony internetowej jest automatyczną autoryzacją – analogicznie – niezaakceptowanie wymagań nie udziela autoryzacji.
  4. W momencie autoryzacji serwer przekierowuje z powrotem do aplikacji/strony internetowej informacje o udzieleniu zgody.
  5. Aplikacja/strona internetowa otrzymuje token dostęp umożliwiający pobranie wybranych danych o użytkowniku.

W całym procederze chodzi o wygenerowanie tokenu, będącego głównym nośnikiem informacji między podmiotami, które chcą wykonać określoną operację. OAuth może to wykonywać dzięki kompatybilności z protokołem HTTP (ang. Hypertext Transfer Protocol). OAuth ma za zadanie zapewnić „bezpieczny delegowany dostęp” do zasobów serwera w imieniu użytkownika w celu potwierdzenia tożsamości.

Historia

Protokół OAuth zaczął funkcjonować w listopadzie 2006 r., kiedy kanadyjski programista Blaine Cook(inne języki) opracowywał mechanizm OpenID na Twiterze. Chcąc znaleźć sposób na użycie OpenID z interfejsem API Twittera do właściwego uwierzytelnienia skontaktował się z Chrissem Messiną. Podczas spotkania branżowego CitizenSpace OpenID Cook, Messina, David Recordon(inne języki) oraz Larry Halff doszli do wspólnego porozumienia dotychczasowych poczynań w tematyce Open ID. Grupa uznała, że w mechanizmie OpenID Twitter nie było otwartego standardu dla interfejsu API. Kilka miesięcy po spotkaniu, w kwietniu 2007 r. utworzono grupę dyskusyjną OAuth, której celem było zaprojektowanie protokołu otwartego. Dzięki właściwym zastosowaniom Cooka, Messuny, Recordona, Halffa oraz wsparciu DeWitta Clintona z Google w lipcu 2007 r. projekt posiadał zarys oraz specyfikację, natomiast w październiku 2007 r. opublikowana ujednoliconą wersję OAuth Core 1.0.

W listopadzie 2008 roku, podczas 73. spotkania Internet Engineering Task Force (IETF) w Minneapolis poruszony został temat włączenia protokołu do IETF w celu dalszej standaryzacji OAuth. Następstwem tego wydarzenia było stworzenie oficjalnej grupy OAuth na IETF – w kwietniu 2010 protokół OAuth 1.0 został opublikowany jako RFC 5849 ↓.

Aktualizacja protokołu OAuth 1.0 nastąpiła w październiku 2012 r. Nowa struktura OAuth 2.0 została opublikowana jako RFC 6749 ↓, a użycie tokenów na okaziciela jako RFC 6750 ↓.

Wartym podkreślenia jest fakt, że OAuth 1.0 oraz OAuth 2.0 nie są ze sobą kompatybilne, Facebook, Google oraz Microsoft obsługują tylko OAuth 2.0., jako mechanizmu autoryzacyjnego zalecanego dla wszystkich interfejsów API wewnątrz oraz dla stron trzecich.

Dlaczego warto korzystać z protokołu OAuth?

Opisując mechanizm funkcjonowania OAuth, można wnioskować, że jest on rozwiązaniem praktycznym, a korzyści z jego wykorzystywania są następujące:

Potencjalne wady OAuth

OAuth 1.0 vs. OAuth 2.0

OAuth 2.0 jest unowocześnioną, zaktualizowaną wersją OAuth 1.0. Dla osób, które dotychczas korzystały ze starszego protokołu, przejście na nowsze rozwiązania może się okazać kłopotem, gdyż specyfikacja obu znacznie się zmieniła. Co więcej, oba protokoły nie są ze sobą kompatybilne, dlatego też producenci zalecają ze skorzystania z nowszego standardu podczas tworzenia nowych aplikacji. Widoczne różnice obu protokołów są następujące:

W teorii OAuth 2.0 okazuje się rozwiązaniem mniej skomplikowanym, udoskonalonym, jednak liczne niedomówienia w oficjalnej dokumentacji OAuth 2.0 sprawiają, że aspekt bezpieczeństwa w tym protokole jest dosyć naciągany. Z owego powodu główny autor specyfikacji projektu – Eran Hammer-Lahav zrezygnował z pełnionej funkcji, wycofał się z grupy roboczej IETF oraz usunął swoje personalia z koncepcji OAuth 2.0. Redaktor podkreślił, że różnica pomiędzy wersjami 2.0 a 1.0 jest bardzo widoczna, ale w negatywnym aspekcie. Według niego OAuth 2.0 stał się „bardziej złożony, mniej interoperacyjny, mniej przydatny, bardziej niekompletny, a co najważniejsze, mniej bezpieczny”. Następnie, z niewyjaśnionych przyczyn z szeregów grupy wycofał się także David Recordon(inne języki), a rolę głównego redaktora – tuż przed oficjalnym opublikowaniem OAuth 2.0 w październiku 2012 r. objął Dick Hardt(inne języki).

SAML vs. OAuth

SAML (Security Assertion Markup Language) jest alternatywnym standardem uwierzytelnienia, sprawdzającym się w rejestracji jednokrotnej (SSO) w wielu przedsiębiorstwach oraz firmach. Dzięki temu rozwiązaniu przedsiębiorstwa mogą monitorować, kto posiada dostęp do zasobów wewnętrznych. Protokół ten dużej mierze jest nastawiony na zachowanie wysokich standardów bezpieczeństwa w przedsiębiorstwach.

SAML uwierzytelnia i autoryzuje dostęp pomiędzy dostawcą usługi oraz dostawcą tożsamości. Ich relacja prezentuje się następująco:

  1. Dostawca usługi przyzwala dostawcy tożsamości na uwierzytelnienie określonych użytkowników.
  2. Dostawca tożsamości generuje potwierdzenie, wskazujące na prawidłowe uwierzytelnienie.

Podstawową różnicą między protokołami SAML oraz OAuth jest to, że pierwszy podczas wymiany informacji uwierzytelnienia korzysta z dokumentów XML (ang. Extensible Markup Language), czyli cyfrowego sposobu podpisu, a OAuth używa JSON (ang. JavaScript Object Notation), będącego formatem tekstowym, bazującym na podzbiorze języka JavaScript. Dalej, kluczową rozbieżnością jest to, że OAuth sukcesywnie korzysta w wywołań interfejsu API, dzięki czemu ten protokół jest rekomendowany przez użytkowników aplikacji mobilnych, nowoczesnych aplikacji internetowych, konsol do gier oraz IoT, a SAML ma możliwość upuszczania tymczasowych plików cookie w przeglądarce.

Zobacz też

Przypisy

  1. ↑ OAuth 2.0 – OAuth [online], oauth.net [dostęp 2020-04-08].
  2. 1 2 RFC 6749 ↓.
  3. 1 2 3 OAuth 2.0 – jak działa / jak testować / problemy bezpieczeństwa [online], Sekurak, 13 lutego 2017 [dostęp 2020-04-08].
  4. 1 2 3 4 5 6 7 Rob Sobers Updated: 8/30/2018, What is OAuth? Definition and How it Works [online], Inside Out Security, 5 kwietnia 2012 [dostęp 2020-04-08] (ang.).
  5. 1 2 Introduction – OAuth [online], oauth.net [dostęp 2020-04-08].
  6. ↑ Using OAuth 2.0 to Access Google APIs | Google Identity Platform [online], Google Developers [dostęp 2020-04-08] (ang.).
  7. ↑ 77, OAuth authorization code flow – Microsoft identity platform [online], docs.microsoft.com [dostęp 2020-04-08] (ang.).
  8. ↑ Facebook Login – Documentation [online], Facebook for Developers [dostęp 2020-04-08] (ang.).
  9. ↑ OAuth 2.0 – jak działa / jak testować / problemy bezpieczeństwa [online], Sekurak, 13 lutego 2017 [dostęp 2020-04-15].
  10. ↑ OAuth 2.0 – jak działa / jak testować / problemy bezpieczeństwa [online], Sekurak, 13 lutego 2017 [dostęp 2020-04-16].
  11. 1 2 How is OAuth 2 different from OAuth 1? [online], Stack Overflow [dostęp 2020-04-08].
  12. ↑ Eran Hammer, Introducing OAuth 2.0 [online], Medium, 23 marca 2017 [dostęp 2020-04-08] (ang.).
  13. ↑ Eran Hammer, OAuth 2.0 and the Road to Hell [online], Medium, 3 czerwca 2017 [dostęp 2020-04-08] [zarchiwizowane z adresu 2013-03-25] (ang.).
  14. ↑ How SAML Authentication Works [online], Auth0 – Blog [dostęp 2020-04-08] (ang.).

Linki zewnętrzne