OAuth2 | Server-Beispiel

Lassen Sie uns ein einfaches OAuth2-Server-Beispiel erstellen, unter Verwendung eines TsgcWebSocketHTTPServer.

 

Erstellen Sie zunächst 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;

Erstellen Sie dann eine neue Instanz von TsgcHTTP_OAuth2_Server und weisen Sie sie dem zuvor erstellten Server zu.

Registrieren Sie eine neue Anwendung mit den 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;

Behandeln Sie dann das Ereignis OnOAuth2Authentication der OAuth2-Server-Komponente und implementieren Sie Ihre eigene Methode zum Anmelden von Benutzern. Ich verwende 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;

Starten Sie schließlich den Server und verwenden Sie einen OAuth2-Client zum Anmelden; beispielsweise können Sie den TsgcHTTP_OAuth2_Client verwenden, der in der sgcWebSockets-Bibliothek enthalten ist.

 

 

Fordert ein neues Access Token an; eine neue Webbrowser-Sitzung wird angezeigt und der Benutzer muss die Verbindung zulassen und sich dann anmelden.

 

 

Bei erfolgreicher Anmeldung wird ein neues Token an den Client zurückgegeben. Dann müssen alle Anforderungen dieses Bearer-Token in den HTTP-Headern enthalten.