Authentification personnalisée Pusher

· Fonctionnalités

À partir de sgcWebSockets 2022.1, le client Pusher sgcWebSockets te permet d'implémenter ta propre authentification personnalisée.

Pusher n'autorise l'abonnement aux canaux privés ou présence que si la connexion fournit un jeton d'authentification, ce qui permet de restreindre l'accès.

Tu peux construire ton propre flux d'authentification avec l'événement OnPusherAuthentication. Cet événement est appelé avant que le message d'abonnement ne soit signé avec la clé secrète fournie par Pusher. Il dispose de 2 paramètres : une demande d'authentification avec des champs comme SocketId, nom du canal... qui peuvent être utilisés par ton propre serveur d'authentification pour authentifier ou non la requête. Tu trouveras ci-dessous une capture d'écran montrant le flux d'authentification Pusher.

Flux d'abonnement privé Pusher 

Exemple Delphi 

Quand un client se connecte au serveur pusher, il envoie la clé fournie par pusher et le serveur renvoie un identifiant d'identification (socket_id).

Quand un client s'abonne à un canal privé (ou présence), le client sgcWebSockets utilise la clé secrète fournie par pusher pour créer une signature incluse dans le message d'abonnement. Grâce à l'événement OnPusherAuthentication, tu peux capturer les champs requis pour signer le message, implémenter tes propres méthodes d'authentification et, en cas de succès, renvoyer la signature ; celle-ci sera incluse dans le message d'abonnement et envoyée au serveur.

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
  // si la demande d'authentification réussit, renvoie la signature
  if CustomAuthentication(AuthRequest.Channel, AuthRequest.SocketID) then
    AuthResponse.Signature := GetCustomAuthenticationSignature;
end; 

Le format de la signature est :

Canaux privés : key:HMAC256(SocketID, ChannelName)

Canaux présence : key: HMAC256(SocketID, ChannelName, Data)