Sobes.tech
Middle

Czym jest uwierzytelnianie OAuth i jak działa?

sobes.tech AI

Odpowiedź od AI

OAuth jest otwartym standardem autoryzacji. Umożliwia użytkownikowi przyznanie ograniczonego dostępu do swoich danych przechowywanych na innym serwisie (serwerze zasobów) aplikacji trzeciej, bez konieczności przekazywania jej swoich danych uwierzytelniających (login/hasło).

Działanie OAuth opiera się na wydawaniu "tokenów dostępu" zamiast danych uwierzytelniających. Typowy przepływ wygląda następująco:

  1. Żądanie autoryzacji: Użytkownik próbuje wykonać akcję w aplikacji trzeciej, która wymaga dostępu do danych z serwera zasobów. Aplikacja inicjuje żądanie autoryzacji do serwera autoryzacji serwera zasobów.
  2. Przekierowanie do serwera autoryzacji: Użytkownik jest przekierowywany na stronę serwera autoryzacji.
  3. Uwierzytelnianie użytkownika: Użytkownik uwierzytelnia się na serwerze autoryzacji (jeśli jeszcze tego nie zrobił).
  4. Zgoda użytkownika: Serwer autoryzacji prosi użytkownika o pozwolenie na udzielenie aplikacji trzeciej określonego poziomu dostępu do jego danych (zakresy). Użytkownik zatwierdza lub odmawia.
  5. Wydanie kodu autoryzacyjnego: Jeśli użytkownik wyrazi zgodę, serwer autoryzacji przekierowuje użytkownika z powrotem do aplikacji trzeciej, dostarczając "kod autoryzacyjny".
  6. Wymiana kodu autoryzacyjnego na token dostępu: Aplikacja trzecia, po otrzymaniu kodu autoryzacyjnego, wysyła bezpośrednio do serwera autoryzacji żądanie wymiany tego kodu na "token dostępu" i opcjonalnie "token odświeżania". Żądanie to odbywa się między serwerami, omijając przeglądarkę użytkownika, co zwiększa bezpieczeństwo.
  7. Dostęp do danych: Aplikacja trzecia używa uzyskanego tokenu dostępu do wykonywania żądań do serwera zasobów w imieniu użytkownika. Każde żądanie zawiera token w nagłówku.
  8. Weryfikacja tokenu: Serwer zasobów weryfikuje token dostępu i, jeśli jest ważny i odpowiada żądanym zakresom, udostępnia dane.

OAuth ma kilka przepływów (flows), odpowiednich dla różnych scenariuszy, na przykład:

  • Authorization Code Flow: Najbezpieczniejszy, używany dla aplikacji webowych z backendem.
  • Implicit Flow: Przestarzały, używany dla aplikacji webowych bez backendu.
  • Client Credentials Flow: Dla aplikacji uzyskujących dostęp do własnych zasobów, a nie użytkownika.
  • Resource Owner Password Credentials Flow: Niezalecany, przekazuje dane uwierzytelniające użytkownika do aplikacji.

(Przykład Authorization Code Flow)

W C# do implementacji OAuth w aplikacjach webowych często używa się bibliotek takich jak ASP.NET Core Identity z różnymi dostawcami (Google, Facebook itd.) lub bibliotek takich jak IdentityServer do tworzenia własnego serwera autoryzacji.