À 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 :
- CreateAzureCbsSasToken établit une paire de liens CBS expéditeur/récepteur, génère un jeton SAS pour l'entité cible et le publie sur $cbs. Utilise-la pour t'authentifier avec une politique d'accès partagé.
- CreateAzureCbsJWT suit le même échange CBS mais obtient un access token depuis Microsoft Entra ID (Azure AD) via le grant client credentials avant d'envoyer le JWT à $cbs.
Les deux méthodes nécessitent une connexion AMQP active et acceptent les paramètres suivants :
- aName : identifiant de la paire de liens CBS créée en interne.
- aNameSpace et aEntityName : namespace Service Bus (sans le suffixe .servicebus.windows.net) et chemin de file, topic ou abonnement utilisé pour construire l'audience du jeton.
- aKeyName / aKeyValue : nom et clé de la politique d'accès partagé pour les jetons SAS. Le composant signe le jeton et l'envoie avec le type de jeton servicebus.windows.net:sastoken.
- aTenant, aApplicationId, aSecret : directory ID Microsoft Entra (Azure AD), application (client) ID et client secret utilisés pour demander le JWT via le flux client credentials.
- aListeningPort (JWT) : port HTTP local pour le redirect OAuth 2.0 (par défaut 8080 si non fourni).
- aExpiration et aTimeout : durée de vie du jeton émis (en secondes) et temps d'attente maximum (en millisecondes) pour la négociation CBS.
- aRaiseIfError : si True, la méthode lève une exception en cas d'échec de l'acquisition du jeton ou de la réponse CBS.
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);
