Authentification CBS Azure AMQP Service Bus

· Fonctionnalités

À partir de sgcWebSockets 2026.1.0, Azure AMQP 1.0 prend en charge l'authentification CBS via des jetons SAS et JWT.

Azure Service Bus implémente Claims-Based Security (CBS) sur AMQP pour autoriser expéditeurs et récepteurs après le handshake SASL initial. Le client ouvre un lien de management vers le nœud $cbs et envoie une requête put-token contenant soit un jeton Shared Access Signature (SAS), soit un JSON Web Token (JWT) émis par Microsoft Entra ID. Une fois le jeton validé par le broker, l'autorisation est mise en cache pour sa durée de vie et l'application peut créer des liens d'expéditeur et de récepteur sur des files, topics ou abonnements.


Fonctionnement d'Azure CBS

Azure Service Bus implémente CBS sur AMQP pour autoriser expéditeurs et récepteurs après le handshake SASL initial. Le client ouvre un lien de management vers le nœud $cbs et envoie une requête put-token contenant soit un jeton SAS, soit un JWT émis par Microsoft Entra ID. Une fois le jeton validé par le broker, l'autorisation est mise en cache pour sa durée de vie et l'application peut créer des liens d'expéditeur et de récepteur sur des files, topics ou abonnements.

Le client AMQP1 de sgcWebSockets 2026.1.0 automatise ce flux via deux méthodes utilitaires naturelles pour les développeurs Delphi :


Les deux méthodes nécessitent une connexion AMQP active et acceptent les paramètres suivants :

Les exemples suivants montrent comment s'authentifier avec CBS avant d'envoyer des messages.

// ... création du client TCP
oClient := TsgcWebSocketClient.Create(nil);
oClient.Specifications.RFC6455 := False;
oClient.Host := 'esegece.servicebus.windows.net';
oClient.Host := 'esegece.servicebus.windows.net';
oClient.Port := 5671;
oClient.TLS := True;
// ... création du client de protocole AMQP1
oAMQP1 := TsgcWSClient_AMQP1.Create(nil);
oAMQP1.Specifications.RFC6455 := False;
oAMQP1.AMQPOptions.Authentication.AuthType := amqp1authSASLAnonymous;
oAMQP1.Client := oClient;
// ... se connecter et publier le jeton SAS via CBS
oClient.Active := True;
// ... attendre que la connexion soit active et envoyer l'authentification
oAMQP1.CreateAzureCbsSasToken('cbs', 'esegece', 'queue1',
  'RootManageSharedAccessKey', 'BhJ78+w8kMXhS/eE/nBy0cRzodx9tipbi+ASbAXIaH8=',
  3600, 10000, True);

L'exemple suivant se concentre uniquement sur l'authentification Microsoft Entra ID (Azure AD) via JWT. Il montre comment demander un jeton via le flux client credentials et le publier sur $cbs avant de créer des liens pour envoyer ou recevoir des messages. 

oClient := TsgcWebSocketClient.Create(nil);
oClient.Specifications.RFC6455 := False;
oClient.Host := 'esegece.servicebus.windows.net';
oClient.Host := 'esegece.servicebus.windows.net';
oClient.Port := 5671;
oClient.TLS := True;
// ... create AMQP1 protocol client
oAMQP1 := TsgcWSClient_AMQP1.Create(nil);
oAMQP1.Specifications.RFC6455 := False;
oAMQP1.AMQPOptions.Authentication.AuthType := amqp1authSASLAnonymous;
oAMQP1.Client := oClient;
// ... se connecter et publier le JWT via CBS
oClient.Active := True;
// ... wait till the connection is active and send the authentication
oAMQP1.CreateAzureCbsJWT('cbs', 'esegece', 'queue1',
  '00000000-0000-0000-0000-000000000000', // Tenant ID
  '11111111-1111-1111-1111-111111111111', // Application ID
  'client-secret', 8080, 3600, 10000, True);