Komponent serwera dostawcy OAuth2 umożliwia uwierzytelnianie przy użyciu zewnętrznego dostawcy OAuth2 (np. Azure AD lub Google) w celu uzyskania dostępu do chronionych zasobów serwera. Przykład: serwer HTTP można skonfigurować tak, aby umożliwiał użytkownikom logowanie się przy użyciu poświadczeń Azure; po pomyślnym zalogowaniu użytkownicy będą mieli dostęp do chronionych zasobów serwera.
Proces uwierzytelniania odbywa się po stronie serwera, a tokeny OAuth2 nie są udostępniane klientom. Oznacza to, że gdy użytkownik loguje się na przykład za pomocą Azure i uwierzytelnianie się powiedzie, Azure zwraca token dostępu umożliwiający wysyłanie żądań do serwera Azure w celu uzyskania informacji o profilu użytkownika, e-mailach itp. (w zależności od zakresu). Ten token dostępu NIE JEST UDOSTĘPNIANY klientowi (np. przeglądarce internetowej). Zamiast zwracać token dostępu klientowi, serwer tworzy losowe ID powiązane wewnętrznie z tokenem dostępu. Za każdym razem, gdy klient (przeglądarka) chce wywołać serwer OAuth2, używa tego publicznego ID, a serwer na jego podstawie pobiera token dostępu OAuth2 do obsługi żądań HTTP.
Poniżej przedstawiono przykład działania uwierzytelniania OAuth2. W przykładzie użyto konfiguracji Azure AD opisanej pod następującym linkiem: OAuth2 Provider Azure AD.
Uruchom serwer
Serwer rozpoczyna nasłuchiwanie na localhost na porcie 443. Serwer HTTP sgcWebSockets jest powiązany z komponentem dostawcy serwera OAuth2, a właściwość Authentication jest włączona.
Przed uruchomieniem serwera dostawca Azure OAuth2 jest rejestrowany przy użyciu następującego wywołania metody.
RegisterProvider(
'azure',
'90945b8d-f6b7-4b97-b2bd-21c3c90b5f3x',
'PN67Q~5m06c-~X_GMyMf9zMntmm5l2dt~3jVq',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token',
'user.read',
'/login',
'https://localhost/callback'
);
Logowania użytkowników
Użytkownik otwiera nową przeglądarkę internetową i przechodzi do punktu końcowego '/login'.
Serwer wykrywa, że punkt końcowy „/login" jest używany do logowania za pośrednictwem dostawcy Azure i przekierowuje do
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize
I rozpoczyna się przepływ uwierzytelniania OAuth2.
Uwierzytelnianie OAuth2
Użytkownik jest przekierowywany do punktu końcowego uwierzytelniania serwera OAuth2, gdzie musi zalogować się przy użyciu swoich danych uwierzytelniających i zaakceptować warunki aplikacji OAuth2.
Jeśli autoryzacja się powiedzie, Azure AD wysyła kod na podany adres URL.
https://localhost/callback
Walidacja kodu OAuth2
Serwer otrzymał teraz kod z Azure i nawiąże wewnętrzne połączenie z Azure (od serwera do serwera) w celu weryfikacji poprawności tokenu (co zapobiega próbom włamania do serwera).
Serwer łączy się z
https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token
Po przekazaniu parametrów, takich jak odebrany kod i klucz tajny klienta, jeśli walidacja zakończy się sukcesem, Azure zwraca token dostępu, który można wykorzystać do uzyskania dostępu do chronionych zasobów Azure, takich jak odczyt profilu, adresu e-mail itp.
Pomyślny token dostępu
Gdy serwer otrzyma prawidłowy AccessToken, wywoływane jest zdarzenie OnOAuth2ProviderTokenValid, w którym można skonfigurować sposób przechowywania AccessToken (jeśli ma być przechowywany), uzyskując dostęp do klasy parametrów TsgcHTTPOAuth2ProviderToken.
AccesToken: token OAuth2 zwrócony przez Azure.
ID: publiczny identyfikator przechowywany jako ciasteczko.
W tym zdarzeniu można skonfigurować działania po pomyślnym uwierzytelnieniu — na przykład, jeśli wymagane jest przekierowanie użytkownika pod prywatny adres URL, należy użyć poniższego kodu:
Response.Redirect.URL := 'https://localhost/private';
Wysyłanie żądań do Azure
Teraz można wysyłać żądania do serwera Azure, używając publicznego identyfikatora przechowywanego jako plik cookie.
Przykład: aby odczytać dane profilu, należy użyć następującej metody.
Get('ID', 'https://graph.microsoft.com/v1.0/me');
Gdzie ID jest publicznym identyfikatorem.