Należy określić typ klienta i aktora, wybrać obsługiwany przepływ OAuth, żądać najwęższego zakresu uprawnień, dokładnie weryfikować przekierowanie i parametry ochronne, chronić i rotować tokeny oraz testować cały cykl życia, w tym odwołanie, wygaśnięcie i awarię dostawcy.
OAuth 2.0 pozwala aplikacji uzyskać ograniczony dostęp do API bez przejmowania hasła użytkownika. Protokół ten nie jest jednak jednym uniwersalnym przyciskiem „zaloguj się”. Projekt zależy od typu klienta, obecności użytkownika, możliwości bezpiecznego przechowywania sekretu oraz od tego, czy chodzi o dostęp delegowany, czy czysto systemowy.
Błędy powstają przy zbyt szerokich uprawnieniach, nieprawidłowo weryfikowanym przekierowaniu, wycieku tokenu lub myleniu uwierzytelniania z autoryzacją. Implementacja musi być zgodna z dokumentacją konkretnego dostawcy i aktualnymi zaleceniami bezpieczeństwa. Poniższe ramy pomagają zadać właściwe pytania, ale nie zastępują oceny bezpieczeństwa wrażliwej integracji.
Rozróżnijcie aktora, klienta i chronione API
Najpierw proszę rozrysować, kto udziela uprawnień, która aplikacja o nie prosi i do jakiego zasobu uzyskuje dostęp. Strona w przeglądarce, aplikacja serwerowa, klient mobilny i integracja wsadowa mają różne możliwości ochrony sekretów. Jeśli proces działa bez udziału użytkownika, dostęp delegowany może nie być odpowiedni. Nazwy ról należy potwierdzić w dokumentacji dostawcy.
OAuth służy do delegowania dostępu, a nie automatycznie do potwierdzania tożsamości użytkownika w każdym kontekście. Jeśli potrzebne jest logowanie, użyj obsługiwanej warstwy tożsamości i prawidłowo zweryfikuj jej dane. Uprawnienie do uzyskania tokena nie oznacza też prawa do wykonania dowolnej akcji. API musi autoryzować każdy chroniony zasób zgodnie z aktualnymi regułami.
Wybierz obsługiwany przepływ zgodnie z możliwościami klienta
Przy zgodzie użytkownika zwykle stosuje się przekierowanie przez serwer autoryzacji i krótkotrwały kod, który klient bezpiecznie wymienia na token. Klient publiczny potrzebuje ochrony dostosowanej do tego, że nie może przechowywać stałego sekretu. Komunikacja serwer–serwer między zaufanymi systemami może korzystać z innego przepływu, bez interaktywnego użytkownika.
Nie wybieraj przepływu na podstawie pierwszego przykładu z internetu. Sprawdź wsparcie u dostawcy, typ aplikacji i zagrożenia w konkretnym środowisku. Starsze lub uproszczone procedury mogą mieć niewłaściwe właściwości. Decyzję udokumentuj wraz z uzasadnieniem, biblioteką i wersją, aby przy przyszłym utrzymaniu można było ocenić zmianę.
- obecność użytkownika i sposób wyrażenia zgody
- zdolność klienta do ochrony sekretu
- wymagany typ i czas ważności dostępu
- aktualne wsparcie konkretnego dostawcy
Ogranicz zakresy i przekierowania
Proś tylko o zakresy niezbędne do konkretnej funkcji. Integracja, która odczytuje kalendarz, nie musi automatycznie uzyskiwać prawa do usuwania wydarzeń. Wyjaśnij użytkownikowi w zrozumiały sposób, dlaczego dostęp jest potrzebny, i nie uzależniaj podstawowej funkcji od opcjonalnego zakresu. Przy rozszerzaniu możliwości proś o nowe uprawnienie świadomie, a nie poprzez ukrytą zmianę.
Adresy przekierowań rejestruj dokładnie i nie używaj bez powodu luźnych wzorców z symbolami wieloznacznymi. Przy powrocie zweryfikuj powiązanie z rozpoczętą sesją oraz wartości zabezpieczające zgodnie z używanym przepływem. Odpowiedzi błędów nie pokazują tokenu ani szczegółów wewnętrznych. Po pomyślnym zakończeniu usuń z adresu jednorazowe parametry i przejdź do bezpiecznego celu.
Chroń tokeny przez cały ich cykl życia
Token należy traktować jako dane wrażliwe o określonym odbiorcy, zakresie i okresie ważności. Proszę go przechowywać tylko tam, gdzie dana część aplikacji go potrzebuje, i nie przekazywać go w adresie URL, analityce ani zwykłych logach. Sekrety serwerowe powinny trafiać do systemu zarządzania sekretami lub chronionej konfiguracji, a nie do repozytorium czy systemu redakcyjnego.
Zaprojektuj odnawianie krótkotrwałego dostępu, rotację, odwołanie i zakończenie połączenia. Token odświeżania może podlegać bardziej rygorystycznym wymaganiom niż token dostępu. Przy usunięciu użytkownika lub integracji cofnij uprawnienia, a także usuń dane lokalne zgodnie z ustalonymi zasadami. Równoczesne odnawianie wymaga koordynacji, aby procesy wzajemnie nie unieważniały swojego stanu.
Testuj błędy i monitoruj bez wycieku danych
Zestaw testowy obejmuje odmowę zgody, zmieniony parametr state, nieprawidłowy kod, wygasły token, brakujący zakres, odwołanie dostępu i niedostępny serwer autoryzacji. Należy przetestować wiele kont i organizacji, aby token nie został przypisany niewłaściwemu najemcy. Warto korzystać z utrzymywanej biblioteki, ale kontrolować jej konfigurację i aktualizacje.
Monitoring śledzi techniczne przyczyny niepowodzeń, liczbę odświeżeń i nietypowe próby bez zapisywania samych tokenów. Użytkownik powinien otrzymać bezpieczny sposób ponownego połączenia konta. Zespół operacyjny musi umieć odłączyć integrację i zrotować dane uwierzytelniające bez przestoju pozostałych klientów. Procedura obsługi incydentu obejmuje również sprawdzenie zakresu możliwego dostępu.
- odrzucona lub przerwana zgoda użytkownika
- wygasły, unieważniony i błędnie odnowiony token
- niewystarczający zakres dla wymaganej operacji
- bezpieczne odłączenie konta i wyczyszczenie sesji
Najczęstsze pytania
Czy OAuth 2.0 to logowanie?
OAuth 2.0 to framework delegowanego dostępu. Logowanie użytkownika wymaga warstwy tożsamości i prawidłowej weryfikacji danych zgodnie z obsługiwanym standardem. Samego tokenu dostępu nie można bez kontekstu traktować jako profilu tożsamości.
Czy token może być przechowywany w przeglądarce?
Zależy to od architektury i zagrożeń. Klient publiczny nie jest w stanie chronić stałego sekretu tak jak serwer. Projekt minimalizuje ekspozycję i opiera się na aktualnych praktykach używanej platformy i dostawcy.
Dlaczego jeden szeroki zakres uprawnień nie wystarczy?
Szerokie uprawnienie zwiększa skutki wycieku lub błędu i utrudnia użytkownikowi zrozumienie zgody. Każda funkcja powinna używać najmniejszego zakresu, jakiego potrzebuje do swojego konkretnego zadania.