sgcWebSockets 2026.1.0'dan itibaren Azure AMQP 1.0, SAS Tokenları ve JWT kullanarak CBS Kimlik Doğrulamasını destekler.
Azure Service Bus, ilk SASL el sıkışmasından sonra gönderenleri ve alıcıları yetkilendirmek için AMQP üzerinden Claims-Based Security (CBS) uygular. İstemci, $cbs düğümüne bir yönetim bağlantısı açar ve Shared Access Signature (SAS) tokenı veya Microsoft Entra ID tarafından verilen bir JSON Web Token (JWT) içeren bir put-token isteği gönderir. Broker tokenı doğruladığında, yetkilendirme ömrü boyunca önbelleğe alınır ve uygulama kuyruklara, konulara veya aboneliklere karşı gönderen ve alıcı bağlantıları oluşturmaya devam edebilir.
Azure CBS Nasıl Çalışır
Azure Service Bus, ilk SASL el sıkışmasından sonra gönderenleri ve alıcıları yetkilendirmek için AMQP üzerinden CBS uygular. İstemci, $cbs düğümüne bir yönetim bağlantısı açar ve SAS tokenı veya Microsoft Entra ID tarafından verilen bir JWT içeren bir put-token isteği gönderir. Broker tokenı doğruladığında, yetkilendirme ömrü boyunca önbelleğe alınır ve uygulama kuyruklara, konulara veya aboneliklere karşı gönderen ve alıcı bağlantıları oluşturmaya devam edebilir.
sgcWebSockets 2026.1.0'daki AMQP1 istemcisi, bu akışı Delphi geliştiricilerine doğal gelen iki yardımcı metot aracılığıyla otomatikleştirir:
- CreateAzureCbsSasToken, bir CBS gönderen/alıcı bağlantı çifti kurar, hedef varlık için bir SAS tokenı oluşturur ve bunu $cbs'e yayınlar. Bir paylaşılan erişim ilkesiyle kimlik doğrulaması yaparken kullanın.
- CreateAzureCbsJWT, aynı CBS değişimini izler ancak JWT'yi $cbs'e göndermeden önce client-credentials izni kullanarak Microsoft Entra ID'den (Azure AD) bir erişim tokenı edinir.
Her iki metot da etkin bir AMQP bağlantısı gerektirir ve aşağıdaki parametreleri kabul eder:
- aName: Dahili olarak oluşturulan CBS bağlantı çifti için tanımlayıcı.
- aNameSpace ve aEntityName: Service Bus ad alanı (.servicebus.windows.net son eki olmadan) ve token hedef kitlesini oluşturmak için kullanılan kuyruk, konu veya abonelik yolu.
- aKeyName / aKeyValue: SAS tokenları için paylaşılan erişim ilkesi adı ve anahtarı. Bileşen tokenı imzalar ve servicebus.windows.net:sastoken token türünü kullanarak gönderir.
- aTenant, aApplicationId, aSecret: JWT'yi client credentials akışıyla istemek için kullanılan Microsoft Entra (Azure AD) dizin kimliği, uygulama (istemci) kimliği ve istemci secret'ı.
- aListeningPort (JWT): OAuth 2.0 yönlendirmesi için yerel HTTP bağlantı noktası (sağlanmadığında varsayılan olarak 8080).
- aExpiration ve aTimeout: Verilen tokenın ömrü (saniye cinsinden) ve CBS müzakeresi için maksimum bekleme süresi (milisaniye cinsinden).
- aRaiseIfError: True olarak ayarlandığında, token edinimi veya CBS yanıtı başarısız olursa metot bir istisna oluşturur.
Aşağıdaki örnekler, mesaj göndermeden önce CBS ile nasıl kimlik doğrulaması yapılacağını göstermektedir.
// ... 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);
Sonraki örnek yalnızca JWT kullanan Microsoft Entra ID (Azure AD) kimlik doğrulamasına odaklanır. Mesaj göndermek veya almak için bağlantılar oluşturmadan önce client credentials akışıyla bir tokenın nasıl isteneceğini ve $cbs'e nasıl yayınlanacağını gösterir.
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);
