Autoryzacja serwera OAuth2

· Komponenty

Od sgcWebSockets 4.4.5 protokół OAuth2 jest obsługiwany w komponentach serwerowych.

OAuth2 umożliwia aplikacjom stron trzecich uzyskanie ograniczonego dostępu do usługi HTTP w imieniu właściciela zasobu lub pozwalając aplikacji stron trzecich uzyskać dostęp we własnym imieniu. Dzięki OAuth2 dostawcy usług i aplikacje konsumenckie mogą komunikować się ze sobą w bezpieczny sposób.

TsgcHTTP_OAuth2_Server

Ten komponent zapewnia implementację protokołu OAuth2 w komponentach po stronie serwera.

Komponenty serwerowe mają właściwość Authorization.OAuth.OAuth2, w której możesz przypisać instancję TsgcHTTP_OAuth2_Server. Jeśli uwierzytelnianie jest włączone i właściwość OAuth2 jest powiązana z komponentem serwera OAuth2, żądania WebSocket i HTTP wymagają tokenu Bearer do przetworzenia — w przeciwnym razie połączenie zostanie automatycznie zamknięte.

Sample Example 

Przygotujmy prosty przykład serwera OAuth2 z użyciem TsgcWebSocketHTTPServer.

Najpierw utwórz nowy TsgcWebSocketHTTPServer nasłuchujący na porcie 443 i używający certyfikatu samopodpisanego w pliku sgc.pem.

oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 80;
oServer.SSLOptions.Port := 443;
oServer.SSLOptions.CertFile := 'sgc.pem';
oServer.SSLOptions.KeyFile := 'sgc.pem';
oServer.SSLOptions.RootCertFile := 'sgc.pem';
oServer.SSL := True; 

Następnie utwórz nową instancję TsgcHTTP_OAuth2_Server i przypisz ją do wcześniej utworzonego serwera.

Zarejestruj nową aplikację z następującymi wartościami:

Nazwa: MyApp

RedirectURI: http://127.0.0.1:8080

ClientId: client-id

ClientSecret: client-secret

OAuth2 := TsgcHTTP_OAuth2_Server.Create(nil);
OAuth2.Apps.AddApp('MyApp', 'http://127.0.0.1:8080', 'client-id', 'client-secret');
oServer.Authentication.Enabled := True;
oServer.Authentication.OAuth.OAuth2 := OAuth2; 

Następnie obsłuż zdarzenie OnOAuth2Authentication komponentu serwera OAuth2 i zaimplementuj własną metodę logowania użytkowników. Użyję pary „user/secret” do akceptacji logowania.

procedure OnAuth2Authentication(Connection: TsgcWSConnection; OAuth2: TsgcHTTPOAuth2Request; aUser, aPassword: string; var Authenticated: Boolean);
begin
  if ((aUser = 'user') and (aPassword = 'secret')) then
    Authenticated := True;
end; 

Na koniec uruchom serwer i użyj klienta OAuth2 do logowania — możesz na przykład skorzystać z TsgcHTTP_OAuth2_Client included with sgcWebSockets library.

Zażądaj nowego tokenu dostępu — zostanie otwarta nowa sesja przeglądarki, w której użytkownik musi zezwolić na połączenie i zalogować się.


Jeśli logowanie się powiedzie, klientowi zostanie zwrócony nowy token. Następnie wszystkie żądania muszą zawierać ten token bearer w nagłówkach HTTP.