Dostawca OAuth2 | Uwierzytelnianie

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.