Autorizzazione server OAuth2

· Componenti

Da sgcWebSockets 4.4.5 il protocollo OAuth2 è supportato nei componenti server.

OAuth2 consente ad applicazioni di terze parti di ricevere un accesso limitato a un servizio HTTP, sia per conto di un resource owner sia permettendo a un'applicazione di terze parti di ottenere l'accesso per proprio conto. Grazie a OAuth2, i service provider e le applicazioni consumer possono interagire tra loro in modo sicuro .

TsgcHTTP_OAuth2_Server

Questo componente fornisce l'implementazione del protocollo OAuth2 nei componenti lato server.

I componenti server hanno una proprietà chiamata Authorization.OAuth.OAuth2 a cui puoi assegnare un'istanza di TsgcHTTP_OAuth2_Server: quindi, se Authentication è abilitato e la proprietà OAuth2 è collegata al componente server OAuth2, le richieste WebSocket e HTTP richiedono un Bearer Token per essere processate, altrimenti la connessione sarà chiusa automaticamente.

Esempio 

Facciamo un semplice esempio di server OAuth2 usando un TsgcWebSocketHTTPServer.

Per prima cosa, crea un nuovo TsgcWebSocketHTTPServer in ascolto sulla porta 443 e che usa un certificato self-signed nel file 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; 

Poi crea una nuova istanza di TsgcHTTP_OAuth2_Server e assegnala al server creato prima.

Registra una nuova applicazione con i valori seguenti:

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; 

Poi gestisci l'evento OnOAuth2Authentication del componente server OAuth2 e implementa il tuo metodo per autenticare gli utenti. Userò la coppia "user/secret" per accettare un login. Inserisci qui il tuo testo...

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

Infine avvia il server e usa un client OAuth2 per autenticarti; ad esempio puoi usare TsgcHTTP_OAuth2_Client incluso nella libreria sgcWebSockets.

Richiedi un nuovo Access Token: sarà mostrata una nuova sessione del web browser e l'utente dovrà consentire la connessione e poi autenticarsi.


Se il login va a buon fine, sarà restituito un nuovo Token al client. Da quel momento tutte le richieste dovranno includere questo bearer token negli header HTTP.