Ten komponent zapewnia implementację protokołu OAuth2 w komponentach po stronie serwera.
Ten komponent zapewnia implementację protokołu OAuth2 w komponentach po stronie serwera.
Komponenty serwera posiadają właściwość Authorization.OAuth.OAuth2, do której można przypisać instancję TsgcHTTP_OAuth2_Server. Gdy uwierzytelnianie jest włączone i właściwość OAuth2 jest podłączona do komponentu serwera OAuth2, żądania WebSocket i HTTP wymagają tokenu Bearer do przetworzenia; w przeciwnym razie połączenie jest automatycznie zamykane.
OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
Server.Authentication.Enabled := True;
Server.Authentication.OAuth.OAuth2 := OAuth2;
Serwer obsługuje następujące typy autoryzacji:
- auth2Code: Stosowany do uwierzytelniania i autoryzacji w większości typów aplikacji, w tym jednostronicowych, webowych i natywnych. Przepływ umożliwia aplikacjom bezpieczne uzyskiwanie access_token, które można wykorzystać do dostępu do chronionych zasobów, a także tokenów odświeżania do uzyskiwania kolejnych access_token oraz tokenów ID dla zalogowanego użytkownika.
- auth2ClientCredentials: Ten typ przyznania jest powszechnie stosowany w interakcjach między serwerami, które muszą działać w tle bez bezpośredniej interakcji z użytkownikiem. Tego rodzaju aplikacje są często nazywane demonami lub kontami usług.
- password (Resource Owner Password Credentials): Umożliwia aplikacji logowanie użytkownika przez bezpośrednią obsługę jego danych uwierzytelniających. Klient wysyła nazwę użytkownika i hasło do punktu końcowego tokenu.
- urn:ietf:params:oauth:grant-type:device_code (Device Code): Przyznanie autoryzacji urządzenia zgodnie z RFC 8628. Umożliwia urządzeniom z ograniczonym interfejsem wejściowym (smart TV, urządzenia IoT) uzyskanie autoryzacji użytkownika poprzez autoryzację na urządzeniu pomocniczym.
Typ autoryzacji można dostosować podczas rejestracji aplikacji; domyślnie obsługiwane są wszystkie typy autoryzacji.
EndPoints
Domyślnie komponent jest skonfigurowany z następującymi punktami końcowymi do obsługi żądań autoryzacji i tokenów
Autoryzacja: /sgc/oauth2/auth
Token: /sgc/oauth2/token
Revocation: /sgc/oauth2/revoke
Introspection: /sgc/oauth2/introspect
Autoryzacja urządzenia: /sgc/oauth2/device
Weryfikacja urządzenia: /sgc/oauth2/device/verify
Jeśli więc serwer nasłuchuje na porcie 443, a domena to www.esegece.com, punkty końcowe będą następujące:
Autoryzacja: https://www.esegece.com/sgc/oauth2/auth
Token: https://www.esegece.com/sgc/oauth2/token
Revocation: https://www.esegece.com/sgc/oauth2/revoke
Introspection: https://www.esegece.com/sgc/oauth2/introspect
Device Authorization: https://www.esegece.com/sgc/oauth2/device
Weryfikacja urządzenia: https://www.esegece.com/sgc/oauth2/device/verify
Punkty końcowe można skonfigurować we właściwości OAuth2Options.
Domyślnie włączone jest rozszerzenie PKCE (rozszerzenie przepływu kodu autoryzacji zapobiegające atakom CSRF i wstrzykiwaniu kodu autoryzacji).
Konfiguracja
Przed rozpoczęciem procesu OAuth2 należy zarejestrować aplikacje, które będą dostępne; operację tę wykonuje się przy użyciu właściwości Apps komponentu serwera OAuth2.
Rejestracja aplikacji
Użyj Apps.AddApp, aby dodać nową aplikację do serwera OAuth2; należy ustawić następujące parametry:
- App Name:
to nazwa aplikacji. Przykład: MyApp
- RedirectURI:
adres, na który będą przekierowywane odpowiedzi. Przykład: http://127.0.0.1:8080
- ClientId:
informacja publiczna stanowiąca identyfikator klienta.
- ClientSecret:
musi być przechowywany w poufności.
Opcjonalnie można ustawić następujące parametry:
- ExpiresIn:
domyślnie wynosi 3600 sekund, co oznacza, że token wygaśnie po 1 godzinie;
w razie potrzeby można ustawić większą wartość.
- RefreshToken:
domyślnie tokeny odświeżania są obsługiwane; jeśli nie, należy ustawić
ten parametr na false.
- AllowedGrantTypes: domyślnie obsługiwane są wszystkie typy przyznania dostępu (auth2Code i auth2ClientCredentials), jednak serwer można skonfigurować tak, aby zezwalał wyłącznie na Code Authorization lub wyłącznie na Client Credentials.
Usuwanie aplikacji
Użyj metody Apps.RemoveApp, aby usunąć istniejącą aplikację.
AddToken
Jeśli serwer został ponownie uruchomiony w trakcie wydawania tokenów, można odzyskać te tokeny za pomocą metody AddToken przed uruchomieniem serwera OAuth2 i po zarejestrowaniu aplikacji
- AppName: nazwa aplikacji.
- Token: token dostępu.
- Expires: moment wygaśnięcia tokenu.
- RefreshToken: token odświeżający.
RemoveToken
Usuwa już wydany token.
OAuth2Options
Właściwość OAuth2Options umożliwia konfigurację punktów końcowych serwera i opcjonalnych funkcji.
Odwołanie
Unieważnianie tokenów zgodnie z RFC 7009. Po włączeniu klienci mogą unieważniać wcześniej wydane tokeny dostępu lub odświeżania.
- OAuth2Options.Revocation.Enabled: ustawienie na True włącza punkt końcowy unieważniania.
- OAuth2Options.Revocation.URL: ścieżka URL punktu końcowego. Domyślnie: /sgc/oauth2/revoke
Introspekcja
Introspekcja tokenu zgodnie z RFC 7662. Po włączeniu serwery zasobów mogą odpytywać serwer autoryzacji w celu ustalenia aktywnego stanu i metadanych tokenu.
- OAuth2Options.Introspection.Enabled: ustaw na True, aby włączyć punkt końcowy introspekcji.
- OAuth2Options.Introspection.URL: ścieżka URL punktu końcowego. Domyślnie: /sgc/oauth2/introspect
DeviceAuthorization
Device Authorization Grant zgodnie z RFC 8628. Po włączeniu urządzenia z ograniczeniami wejścia mogą żądać autoryzacji, umożliwiając użytkownikowi autoryzację na urządzeniu pomocniczym.
- OAuth2Options.DeviceAuthorization.Enabled: należy ustawić na True, aby włączyć punkt końcowy autoryzacji urządzenia.
- OAuth2Options.DeviceAuthorization.URL: ścieżka URL punktu końcowego dla żądań kodu urządzenia. Domyślnie: /sgc/oauth2/device
- OAuth2Options.DeviceAuthorization.VerificationURL: ścieżka URL punktu końcowego strony weryfikacji użytkownika. Domyślnie: /sgc/oauth2/device/verify
- OAuth2Options.DeviceAuthorization.ExpiresIn: czas życia kodu urządzenia w sekundach. Wartość domyślna: 600 (10 minut).
- OAuth2Options.DeviceAuthorization.Interval: minimalny interwał odpytywania w sekundach, jaki klient powinien stosować podczas odpytywania punktu końcowego tokenu. Domyślnie: 5.