Da sgcWebSockets 2022.1 il client Pusher di sgcWebSockets permette di implementare la tua autenticazione personalizzata.
Pusher consente di sottoscrivere canali private o presence solo se la connessione fornisce un token di autenticazione, in modo da poter limitare l'accesso.
Puoi costruire il tuo flusso di autenticazione tramite l'evento OnPusherAuthentication: questo evento viene chiamato prima che il messaggio di sottoscrizione sia firmato con la secret key fornita da Pusher. L'evento ha 2 parametri, una request authentication con campi come SocketId, channel name... utilizzabili dal tuo server di autenticazione per autenticare o meno la richiesta. Qui sotto trovi uno screenshot che mostra il flusso di autenticazione di Pusher
Flusso di sottoscrizione privata Pusher

Esempio Delphi
Quando un client si connette al server Pusher, invia la chiave fornita da Pusher e il server restituisce un id di identificazione (socket_id).
Quando un client si sottoscrive a un canale private (o presence), il client sgcWebSockets usa la Secret Key fornita da Pusher per creare una firma inclusa nel messaggio di sottoscrizione. Usando l'evento OnPusherAuthentication puoi catturare i campi necessari per firmare il messaggio, implementare i tuoi metodi di autenticazione e, in caso di successo, restituire la firma che sarà inclusa nel messaggio di sottoscrizione e inviata al server.
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;
Il formato della firma è:
Canali privati: key:HMAC256(SocketID, ChannelName)
Canali presence: key: HMAC256(SocketID, ChannelName, Data)
