Pusher aangepaste authenticatie

· Functies

From sgcWebSockets 2022.1, the sgcWebSockets Pusher client allows to implement your own custom authentication.

Pusher staat abonneren op private- of presence-kanalen alleen toe als de verbinding een authenticatietoken meelevert, waardoor de toegang kan worden beperke access.

Je kunt je eigen authenticatie-flow bouwen met het OnPusherAuthentication-event; dit event wordt aangeroepen voordat het abonnementsbericht wordt ondertekend met de geheime sleutel die door Pusher is verstrekt. Dit event heeft 2 parameters: een request-authentication met velden zoals SocketId, kanaalnaam... die door je eigen authenticatieserver gebruikt kunnen worden om het verzoek wel of niet te authenticeren. Hieronder vind je een screenshot die de Pusher-authenticatie-flow toont

Pusher private subscription-flow 

Delphi-voorbeeld 

Wanneer een client verbinding maakt met de Pusher-server, stuurt deze de door Pusher verstrekte Key en geeft de server een identificatie-ID terug (socket_id).

Wanneer een client zich abonneert op een privaat (of presence) kanaal, gebruikt de sgcWebSockets-client de door Pusher verstrekte Secret Key om een handtekening aan te maken die in het abonnementsbericht wordt opgenomen. Met het OnPusherAuthentication-event kun je de velden vastleggen die nodig zijn om het bericht te ondertekenen, je eigen authenticatiemethoden implementeren en, indien succesvol, de handtekening teruggeven; deze handtekening wordt vervolgens in het abonnementsbericht opgenomen en naar de server verzonden.

oClient := TsgcWebSocketClient.Create(nil);
oPusher := TsgcWSAPI_Pusher.Create(nil);
oPusher.Client := oClient;
oPusher.Cluster := 'eu'; 
Pusher.Name := 'js';
Pusher.Version := '4.1';
Pusher.TLS := True;
Pusher.Key := '9c3b7ef25qe97a00116c'; 
Pusher.Secret := ''; // the secret key is not known by the client, only by the authentication module
oPusher.OnPusherAuthentication := OnPusherAuthenticationEvent;
procedure OnPusherAuthenticationEvent(Sender: TObject; AuthRequest: TsgcWSPusherRequestAuthentication; AuthResponse: TsgcWSPusherResponseAuthentication);
begin
  // if the authentication request is succesful return the signature
  if CustomAuthentication(AuthRequest.Channel, AuthRequest.SocketID) then
    AuthResponse.Signature := GetCustomAuthenticationSignature;
end; 

Het formaat van de handtekening is:

Private channels: key:HMAC256(SocketID, ChannelName)

Presence channels: key: HMAC256(SocketID, ChannelName, Data)