• redirect uri
  • callback
  • authorization code
  • code flow
  • oidc
  • pkce

Zrozumienie przekierowania URI i przepływu kodu autoryzacyjnego w OpenID Connect (OIDC)

Przyjrzyjmy się bliżej przekierowaniu URI, ponieważ jest to kluczowy element bezpieczeństwa w procesie uwierzytelniania OIDC.

Charles
Charles
Developer

Czym jest przekierowanie URI?

Przekierowanie URI, znane również jako URL odpowiedzi, to kluczowy element bezpieczeństwa w procesie uwierzytelniania OIDC. Określa adres URL, na który użytkownicy są kierowani po pomyślnym zalogowaniu się za pośrednictwem dostawcy OIDC. Co ważniejsze, to tam twoja aplikacja odbiera kod autoryzacyjny potrzebny do uzyskania tokenów.

Sprawdź wiki Przekierowanie URI po więcej szczegółów.

Czym jest przepływ kodu autoryzacyjnego?

Przepływ kodu autoryzacyjnego (zdefiniowany w OAuth 2.0 RFC 6749, sekcja 4.1) to podstawowa metoda uwierzytelniania w OIDC. Polega na wymianie kodu autoryzacyjnego na token dostępu i opcjonalnie na token odświeżenia. Ten przepływ jest odpowiedni dla aplikacji, które mogą bezpiecznie przechowywać tajny klucz klienta, takich jak aplikacje webowe po stronie serwera.

Sprawdź wiki Przepływ kodu autoryzacyjnego po więcej szczegółów.

Jak działa przekierowanie URI w przepływie kodu autoryzacyjnego?

W przepływie kodu autoryzacyjnego przekierowanie URI to miejsce docelowe, do którego dostawca OIDC wysyła kod autoryzacyjny po pomyślnym uwierzytelnieniu użytkownika. Musi być ono wstępnie zarejestrowane u dostawcy OIDC, aby zapewnić bezpieczeństwo i zapobiec nieautoryzowanym przekierowaniom.

Oto jak można zarejestrować przekierowanie URI w Logto Console: redirect-uri

Podczas inicjowania logowania:

  1. Żądanie autoryzacji: Twoja aplikacja kieruje użytkownika do punktu końcowego autoryzacji dostawcy OIDC, w tym parametrów takich jak client_id, response_type, scope i redirect_uri.
  2. Uwierzytelnienie użytkownika: Użytkownik uwierzytelnia się u dostawcy OIDC.
  3. Dostarczenie kodu autoryzacyjnego: Po pomyślnym uwierzytelnieniu dostawca OIDC przekierowuje użytkownika do określonego redirect_uri, w tym kod autoryzacyjny jako parametr zapytania.

Dostawca OIDC sprawdza zgodność redirect_uri z listą wcześniej zarejestrowanych URI. W przypadku niezgodności zostanie zwrócony błąd invalid_redirect_uri, co zwiększa bezpieczeństwo, zapobiegając nieautoryzowanym punktom końcowym przed uzyskaniem tokenów.

Najlepsze praktyki dotyczące przekierowań URI

W rzeczywistych przypadkach użycia powszechną najlepszą praktyką jest zadeklarowanie dedykowanej strony "Callback" i skojarzenie z routerem / głębokim linkiem, który umożliwia bezpośredni dostęp z zewnątrz. Ten link powinien być użyty jako przekierowanie URI.

Zakładając, że masz jedno-stronicową aplikację webową działającą na https://my-app.com, zwykle przekierowanie URI byłoby zadeklarowane jako https://my-app.com/callback

Lub jeśli jest to natywna aplikacja mobilna, wtedy przekierowanie URI zazwyczaj zaczyna się od niestandardowego schematu, np. com.company://myapp/callback

Inne najlepsze praktyki obejmują:

  • Unikaj symboli wieloznacznych: Nie używaj wzorców symboli wieloznacznych w przekierowaniach URI. Wyraźnie wymień wszystkie dozwolone URI, aby zapobiec nieautoryzowanemu dostępowi.
  • Dokładne dopasowanie: Upewnij się, że przekierowanie URI dokładnie pasuje do tego zarejestrowanego u dostawcy OIDC. Nawet kończący ukośnik może spowodować niezgodność.

Obsługa wywołania zwrotnego logowania

Aby obsłużyć kod autoryzacyjny zwrócony do twojego redirect_uri, wykonaj następujące kroki:

  1. Wyodrębnij kod autoryzacyjny: Pobierz parametr code z łańcucha zapytania przekierowania URI.

  2. Wymień kod autoryzacyjny na tokeny: Sporządź żądanie POST do punktu końcowego tokenu dostawcy OIDC, w tym:

    • client_id: Identyfikator twojej aplikacji u dostawcy OIDC
    • code: Kod autoryzacyjny otrzymany z przekierowania URI
    • code_verifier: Losowy ciąg znaków wygenerowany po stronie klienta
    • redirect_uri: Ten sam URI używany w żądaniu autoryzacyjnym
    • grant_type: Typ grantu, zwykle authorization_code

Przykładowe żądanie wymiany tokena w JavaScript

Upraszczanie procesu wymiany kodu w Logto za pomocą SDK Logto

SDK Logto to zestaw narzędzi deweloperskich napisany w konkretnym języku lub frameworku, np. Logto React SDK, Next.js SDK i Swift SDK. Użycie SDK może znacznie uprościć rzeczy, wywołując tylko jedną lub dwie funkcje.

Oto przykładowy komponent React "Callback" używający oficjalnego React SDK Logto:

Przewodniki dotyczące integracji SDK można znaleźć w dokumentacji szybkiego startu Logto.

Podsumowanie: dlaczego ważne jest opanowanie przekierowań URI w OIDC

Zrozumienie przekierowań URI w OIDC z przepływem kodu autoryzacyjnego jest kluczowe dla zabezpieczenia i optymalizacji twoich procesów uwierzytelniania. Rejestrując zaufane przekierowania URI i efektywnie obsługując wywołania logowania, możesz zapewnić bezproblemowe i bezpieczne doświadczenie dla użytkowników, jednocześnie upraszczając swoje wysiłki deweloperskie z SDK Logto.