Od sgcWebSockets 2026.1.0 Azure AMQP 1.0 obsługuje uwierzytelnianie CBS za pomocą tokenów SAS i JWT.
Azure Service Bus implementuje Claims-Based Security (CBS) przez AMQP w celu autoryzacji nadawców i odbiorców po wstępnym handshake SASL. Klient otwiera łącze zarządzania do węzła $cbs i wysyła żądanie put-token zawierające token SAS (Shared Access Signature) lub JWT wystawiony przez Microsoft Entra ID. Po zweryfikowaniu tokenu przez brokera autoryzacja jest buforowana przez czas jego ważności, a aplikacja może tworzyć łącza nadawcy i odbiorcy dla kolejek, tematów lub subskrypcji.
Jak działa Azure CBS
Azure Service Bus implementuje CBS przez AMQP w celu autoryzacji nadawców i odbiorców po wstępnym handshake SASL. Klient otwiera łącze zarządzania do węzła $cbs i wysyła żądanie put-token zawierające token SAS lub JWT wystawiony przez Microsoft Entra ID. Po zweryfikowaniu tokenu przez brokera autoryzacja jest buforowana przez czas jego ważności, a aplikacja może tworzyć łącza nadawcy i odbiorcy dla kolejek, tematów lub subskrypcji.
Klient AMQP1 w sgcWebSockets 2026.1.0 automatyzuje ten przepływ za pomocą dwóch metod pomocniczych naturalnych dla programistów Delphi:
- CreateAzureCbsSasToken tworzy parę łączy nadawcy/odbiorcy CBS, generuje token SAS dla docelowej encji i publikuje go do $cbs. Używaj go przy uwierzytelnianiu za pomocą polityki współdzielonego dostępu.
- CreateAzureCbsJWT realizuje ten sam przepływ CBS, ale najpierw uzyskuje token dostępu z Microsoft Entra ID (Azure AD) za pomocą przepływu client-credentials, a następnie wysyła JWT do $cbs.
Obie metody wymagają aktywnego połączenia AMQP i przyjmują następujące parametry:
- aName: Identyfikator pary łączy CBS tworzonych wewnętrznie.
- aNameSpace i aEntityName: Przestrzeń nazw Service Bus (bez sufiksu .servicebus.windows.net) oraz ścieżka kolejki, tematu lub subskrypcji używana do budowania odbiorcy tokenu.
- aKeyName / aKeyValue: Nazwa i klucz polityki współdzielonego dostępu dla tokenów SAS. Komponent podpisuje token i wysyła go z typem servicebus.windows.net:sastoken.
- aTenant, aApplicationId, aSecret: ID katalogu Microsoft Entra (Azure AD), ID aplikacji (klienta) i sekret klienta używane do żądania JWT przepływem client credentials.
- aListeningPort (JWT): Lokalny port HTTP dla przekierowania OAuth 2.0 (domyślnie 8080, gdy nie podano).
- aExpiration i aTimeout: Czas ważności wystawianego tokenu (w sekundach) i maksymalny czas oczekiwania (w milisekundach) na negocjację CBS.
- aRaiseIfError: Gdy ustawione na True, metoda zgłasza wyjątek w przypadku niepowodzenia pobrania tokenu lub odpowiedzi CBS.
Poniższe przykłady pokazują, jak uwierzytelniać się przez CBS przed wysyłaniem wiadomości.
// ... 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);
Następny przykład skupia się wyłącznie na uwierzytelnianiu Microsoft Entra ID (Azure AD) przy użyciu tokenów JWT. Pokazuje, jak żądać tokenu przepływem client credentials i publikować go do $cbs przed tworzeniem łączy do wysyłania lub odbierania wiadomości.
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);
