Azure AMQP Service Bus CBS Authentication

· Features

Ab sgcWebSockets 2026.1.0 unterstützt Azure AMQP 1.0 die CBS-Authentifizierung mit SAS-Tokens und JWT.

Azure Service Bus setzt Claims-Based Security (CBS) über AMQP ein, um Sender und Empfänger nach dem ersten SASL-Handshake zu autorisieren. Der Client öffnet einen Management-Link zum Knoten $cbs und sendet eine put-token-Anfrage, die entweder ein Shared-Access-Signature(SAS)-Token oder ein von Microsoft Entra ID ausgestelltes JSON Web Token (JWT) enthält. Sobald der Broker das Token validiert, wird die Autorisierung für ihre Lebensdauer zwischengespeichert, und die Anwendung kann Sender- und Empfänger-Links zu Queues, Topics oder Subscriptions anlegen.


So funktioniert Azure CBS

Azure Service Bus setzt CBS über AMQP ein, um Sender und Empfänger nach dem ersten SASL-Handshake zu autorisieren. Der Client öffnet einen Management-Link zum Knoten $cbs und sendet eine put-token-Anfrage, die entweder ein SAS-Token oder ein von Microsoft Entra ID ausgestelltes JWT enthält. Sobald der Broker das Token validiert, wird die Autorisierung für ihre Lebensdauer zwischengespeichert, und die Anwendung kann Sender- und Empfänger-Links zu Queues, Topics oder Subscriptions anlegen.

Der AMQP1-Client in sgcWebSockets 2026.1.0 automatisiert diesen Ablauf über zwei Hilfsmethoden, die sich für Delphi-Entwickler natürlich anfühlen:


Beide Methoden erfordern eine aktive AMQP-Verbindung und akzeptieren folgende Parameter:

Die folgenden Beispiele zeigen, wie du dich mit CBS authentifizierst, bevor du Nachrichten sendest.

// ... create TCP client
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;
// ... connect and publish SAS token through CBS
oClient.Active := True;
// ... wait till the connection is active and send the authentication
oAMQP1.CreateAzureCbsSasToken('cbs', 'esegece', 'queue1',
  'RootManageSharedAccessKey', 'BhJ78+w8kMXhS/eE/nBy0cRzodx9tipbi+ASbAXIaH8=',
  3600, 10000, True);

Das nächste Beispiel konzentriert sich ausschließlich auf die Authentifizierung mit Microsoft Entra ID (Azure AD) per JWT. Es zeigt, wie du mit dem Client-Credentials-Flow ein Token anforderst und es an $cbs veröffentlichst, bevor du Links zum Senden oder Empfangen von Nachrichten anlegst. 

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;
// ... connect and publish JWT through 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);