Niestandardowe uwierzytelnianie Pusher

· Funkcje

Od sgcWebSockets 2022.1 klient Pusher w sgcWebSockets umożliwia implementację własnego niestandardowego uwierzytelniania.

Pusher zezwala na subskrypcję prywatnych lub presence channels tylko wtedy, gdy połączenie dostarcza token uwierzytelniający — pozwala to ograniczyć dostęp.

Możesz zbudować własny przepływ uwierzytelniania, używając zdarzenia OnPusherAuthentication. Jest ono wywoływane przed podpisaniem wiadomości subskrypcji kluczem tajnym dostarczonym przez Pusher. Zdarzenie ma 2 parametry: żądanie uwierzytelnienia z polami takimi jak SocketId, nazwa kanału... których twój własny serwer uwierzytelniania może używać do uwierzytelnienia lub odrzucenia żądania. Poniżej znajdziesz zrzut ekranu pokazujący przepływ uwierzytelniania Pusher.

Przepływ prywatnej subskrypcji Pusher

Przykład w Delphi

Gdy klient łączy się z serwerem Pusher, wysyła klucz dostarczony przez Pusher, a serwer zwraca identyfikator (socket_id).

Gdy klient subskrybuje prywatny kanał (lub presence), klient sgcWebSockets używa klucza tajnego dostarczonego przez Pusher do utworzenia sygnatury zawartej w wiadomości subskrypcji. Używając zdarzenia OnPusherAuthentication, możesz przechwycić pola potrzebne do podpisania wiadomości, zaimplementować własne metody uwierzytelniania i — jeśli się powiedzie — zwrócić sygnaturę, która zostanie dołączona do wiadomości subskrypcji i wysłana do serwera.

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; 

Format sygnatury:

Kanały prywatne: key:HMAC256(SocketID, ChannelName)

Kanały presence: key: HMAC256(SocketID, ChannelName, Data)