OAuth2-Server-Autorisierung

· Komponenten

Ab sgcWebSockets 4.4.5 wird das OAuth2-Protokoll in den Server-Komponenten unterstützt.

OAuth2 ermöglicht es Drittanbieter-Anwendungen, eingeschränkten Zugriff auf einen HTTP-Dienst zu erhalten – entweder im Namen eines Ressourceninhabers oder indem eine Drittanbieter-Anwendung in eigenem Namen Zugriff erhält. Dank OAuth2 können Dienstanbieter und Verbraucheranwendungen sicher miteinander interagieren.

TsgcHTTP_OAuth2_Server

Diese Komponente stellt die Implementierung des OAuth2-Protokolls in serverseitigen Komponenten bereit.

Die Server-Komponenten verfügen über eine Eigenschaft namens Authorization.OAuth.OAuth2, der du eine Instanz von TsgcHTTP_OAuth2_Server zuweisen kannst. Wenn die Authentifizierung aktiviert ist und die OAuth2-Eigenschaft an eine OAuth2-Server-Komponente gebunden wurde, benötigen WebSocket- und HTTP-Anfragen ein Bearer-Token, um verarbeitet zu werden – andernfalls wird die Verbindung automatisch geschlossen.

Beispiel 

Schauen wir uns ein einfaches OAuth2-Server-Beispiel mit einem TsgcWebSocketHTTPServer an.

Erstelle zuerst einen neuen TsgcWebSocketHTTPServer, der auf Port 443 lauscht und ein selbstsigniertes Zertifikat in der Datei sgc.pem verwendet.

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; 

Erstelle dann eine neue Instanz von TsgcHTTP_OAuth2_Server und weise sie dem zuvor erstellten Server zu.

Registriere eine neue Anwendung mit folgenden Werten:

Name: 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; 

Behandle anschließend das Ereignis OnOAuth2Authentication der OAuth2-Server-Komponente und implementiere deine eigene Methode zur Benutzeranmeldung. Wir verwenden das Paar "user/secret", um eine Anmeldung zu akzeptieren.

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

Starte schließlich den Server und melde dich mit einem OAuth2-Client an. Du kannst zum Beispiel den TsgcHTTP_OAuth2_Client verwenden, der in der sgcWebSockets-Bibliothek enthalten ist.

Fordere ein neues Access Token an: Es öffnet sich eine neue Browser-Sitzung, in der der Nutzer die Verbindung erlauben und sich anmelden muss.


Wenn die Anmeldung erfolgreich war, wird ein neues Token an den Client zurückgegeben. Anschließend müssen alle Anfragen dieses Bearer-Token in den HTTP-Headern enthalten.