Warto być świadomym jak działa to popularne rozwiązanie.
Czym jest OAuth?
Przeglądając Internet natrafiamy na strony, które pozwalają zalogować się za pomocą konta w mediach społecznościowych. Zazwyczaj taka możliwość została zbudowana przy użyciu popularnego OAuth 2.0. OAuth to powszechnie stosowana metoda autoryzacji, która umożliwia witrynom i aplikacjom internetowym żądanie ograniczonego dostępu do konta użytkownika w innej aplikacji. Co najważniejsze, OAuth umożliwia użytkownikowi udzielenie tego dostępu bez ujawniania jego danych logowania do aplikacji, która wysłała żądanie.
OAuth 2.0 jest więc pożyteczny ale niestety także dla atakujących. Wynika to z jego popularności i podatności na błędy implementacji. Może to skutkować szeregiem luk w zabezpieczeniach, umożliwiając atakującym uzyskanie poufnych danych użytkownika i potencjalnie nawet całkowicie ominięcie uwierzytelniania.
Jak to działa?
OAuth 2.0 został pierwotnie opracowany jako sposób udostępniania określonych danych między aplikacjami, nie tylko danych służących do uwierzytelnienia. Działa poprzez zdefiniowanie serii interakcji między trzema różnymi stronami, a mianowicie aplikacją kliencką, właścicielem zasobów i dostawcą usług OAuth:
- Aplikacja kliencka - witryna lub aplikacja internetowa, która chce uzyskać dostęp do danych użytkownika.
- Właściciel zasobu - użytkownik, do którego danych chce uzyskać dostęp aplikacja kliencka.
- Dostawca usługi OAuth - witryna lub aplikacja, która kontroluje dane użytkownika i dostęp do nich. Obsługują one OAuth, udostępniając interfejs API do interakcji zarówno z serwerem autoryzacji, jak i serwerem zasobów.
Krok po kroku
Wszystko zależy od implementacji ale generalnie można przyjąć, że zazwyczaj komunikacja wygląda w następujący sposób:
- Aplikacja kliencka żąda dostępu do podzbioru danych użytkownika, określając typ nadania (uprawnień), którego chce użyć i jakiego rodzaju dostępu chce.
- Użytkownik jest proszony o zalogowanie się do usługi OAuth i wyraźne wyrażenie zgody na żądany dostęp.
- Aplikacja kliencka otrzymuje unikalny token dostępu, który potwierdza, że ma pozwolenie od użytkownika na dostęp do żądanych danych. Dokładny sposób, w jaki to się dzieje, różni się znacznie w zależności od rodzaju uprawnień.
- Aplikacja kliencka używa tego tokena dostępu do wykonywania wywołań API w celu pobrania odpowiednich danych z serwera zasobów.
Sprawdź oferty pracy na TeamQuest
Z punktu widzenia użytkownika końcowego wynik uwierzytelniania OAuth jest czymś, co zasadniczo przypomina logowanie jednokrotne (SSO, single sign-on) oparte na protokole SAML. Uwierzytelnianie OAuth jest generalnie implementowane w następujący sposób:
- Użytkownik wybiera opcję logowania się za pomocą swojego konta w serwisie społecznościowym.
- Następnie aplikacja kliencka korzysta z usługi OAuth serwisu społecznościowego, aby zażądać dostępu do niektórych danych, których może użyć do identyfikacji użytkownika. Może to być na przykład adres e-mail zarejestrowany na ich koncie.
- Po otrzymaniu tokenu dostępu aplikacja kliencka żąda tych danych od serwera zasobów.
- Po otrzymaniu danych aplikacja kliencka używa ich zamiast nazwy użytkownika do logowania użytkownika. Token dostępu, który otrzymała z serwera autoryzacyjnego, jest zaś używany zamiast tradycyjnego hasła.
Słabości
Programiści powinni być świadomi, że zarówno w implementacji protokołu OAuth w aplikacji klienckiej, jak również w konfiguracji samej usługi OAuth mogą pojawić się luki. Poniżej listujemy najczęstsze z nich:
W aplikacji klienckiej:
- Improper implementation of the implicit grant type LABS
- Flawed CSRF protection LABS
W usłudze OAuth:
- Leaking authorization codes and access tokens LABS
- Flawed scope validation
- Unverified user registration