Paylaşılan Erişim İmzaları ile Service Bus erişim denetimi

Bu makalede Paylaşılan Erişim İmzaları (SAS), bunların nasıl çalıştığı ve Azure Service Bus ile platformdan bağımsız bir şekilde nasıl kullanılacağı ele alınmaktadır.

SAS, Service Bus'a erişimi, bir ad alanında veya bir mesajlaşma varlığında (kuyruk veya konu) yapılandırılan yetkilendirme kurallarına göre koruma sağlar. Yetkilendirme kuralının bir adı vardır, belirli haklarla ilişkilendirilir ve bir çift şifreleme anahtarı taşır. Sas belirteci oluşturmak için Service Bus SDK'sı aracılığıyla veya kendi kodunuzda kuralın adını ve anahtarını kullanırsınız. İstemci daha sonra istenen işlem için yetkilendirmeyi kanıtlamak için belirteci Service Bus'a geçirebilir.

Not

Azure Service Bus, Microsoft Entra Id kullanarak bir Service Bus ad alanına ve varlıklarına erişim yetkilendirmeyi destekler. Microsoft Entra ID tarafından döndürülen OAuth 2.0 belirtecini kullanarak kullanıcıları veya uygulamaları yetkilendirmek, paylaşılan erişim imzaları (SAS) üzerinden üstün güvenlik ve kullanım kolaylığı sağlar. Microsoft Entra Id ile belirteçleri kodunuzda depolamanız ve olası güvenlik açıklarını riske atmanıza gerek yoktur.

Microsoft, mümkün olduğunda Azure Service Bus uygulamalarınızla Microsoft Entra Id kullanmanızı önerir. Daha fazla bilgi için aşağıdaki makaleleri inceleyin:

Service Bus ad alanı için yerel veya SAS anahtarı kimlik doğrulamasını devre dışı bırakabilir ve yalnızca Microsoft Entra kimlik doğrulamasına izin vekleyebilirsiniz. Adım adım yönergeler için bkz . Yerel kimlik doğrulamasını devre dışı bırakma.

SAS'ye genel bakış

Paylaşılan Erişim İmzaları, basit belirteçler kullanan talep tabanlı bir yetkilendirme mekanizmasıdır. SAS kullandığınızda anahtarlar hiçbir zaman kabloya geçirilmeyecek. Anahtarlar, daha sonra hizmet tarafından doğrulanacak bilgileri şifreli olarak imzalamak için kullanılır. SAS, istemcinin hemen yetkilendirme kuralı adına ve eşleşen bir anahtara sahip olduğu kullanıcı adı ve parola düzenine benzer şekilde kullanılabilir. SAS, istemcinin imzalama anahtarına sahip olmadan bir güvenlik belirteci hizmetinden zaman sınırlı ve imzalı erişim belirteci aldığı federasyon güvenlik modeline benzer şekilde de kullanılabilir.

Service Bus'ta SAS kimlik doğrulaması, ilişkili erişim haklarına ve bir çift birincil ve ikincil şifreleme anahtarına sahip adlandırılmış paylaşılan erişim yetkilendirme ilkeleriyle yapılandırılır. Anahtarlar, Temel 64 gösteriminde 256 bit değerlerdir. Service Bus kuyruklarında ve konu başlıklarında kuralları ad alanı düzeyinde yapılandırabilirsiniz.

Not

Bu anahtarlar, Temel 64 gösterimi kullanan düz metin dizeleridir ve kullanılmadan önce kodu çözülemez.

Paylaşılan Erişim İmzası belirteci, seçilen yetkilendirme ilkesinin adını, erişilecek kaynağın URI'sini, süre sonu anlık değerini ve seçilen yetkilendirme kuralının birincil veya ikincil şifreleme anahtarı kullanılarak bu alanlar üzerinde hesaplanan bir HMAC-SHA256 şifreleme imzasını içerir.

Paylaşılan erişim yetkilendirme ilkeleri

Her Service Bus ad alanı ve her Service Bus varlığı, kurallardan oluşan bir paylaşılan erişim yetkilendirme ilkesine sahiptir. Ad alanı düzeyindeki ilke, tek tek ilke yapılandırmasından bağımsız olarak ad alanı içindeki tüm varlıklar için geçerlidir.

Her yetkilendirme ilkesi kuralı için üç bilgi parçasına karar verirsiniz: ad, kapsam ve haklar. Ad, yalnızca bu kapsamdaki benzersiz bir addır. Kapsam yeterince kolaydır: söz konusu kaynağın URI'sini oluşturur. Service Bus ad alanı için kapsam, gibi https://<yournamespace>.servicebus.windows.net/tam ad alanıdır.

İlke kuralı tarafından belirtilen haklar aşağıdakilerin bir bileşimi olabilir:

  • Gönder - Varlığa ileti gönderme hakkı verir
  • Dinleme - Alma (kuyruk, abonelikler) ve tüm ilgili ileti işleme hakkını verir
  • Yönet - Varlık oluşturma ve silme dahil olmak üzere ad alanının topolojisini yönetme hakkı verir

Yönet hakkı Gönderme ve Dinleme haklarını içerir.

Ad alanı veya varlık ilkesi en fazla 12 Paylaşılan Erişim Yetkilendirme kuralı barındırabilir ve her biri temel hakları ve Gönder ve Dinle birleşimini kapsayan üç kural kümesine yer açabilir. Bu sınır varlık başınadır; yani ad alanı ve her varlık en fazla 12 Paylaşılan Erişim Yetkilendirme kuralına sahip olabilir. Bu sınır, SAS ilke deposunun kullanıcı veya hizmet hesabı deposu olma amacını taşımadığının altını çizer. Uygulamanızın kullanıcı veya hizmet kimliklerine göre Service Bus'a erişim vermesi gerekiyorsa, bir kimlik doğrulaması ve erişim denetimi sonrasında SAS belirteçleri veren bir güvenlik belirteci hizmeti uygulamalıdır.

Yetkilendirme kuralına Birincil Anahtar ve İkincil Anahtar atanır. Bu anahtarlar şifreleme açısından güçlü anahtarlardır. Bunları kaybetmeyin veya sızdırmayın; her zaman Azure portalında kullanılabilirler. Oluşturulan anahtarlardan birini kullanabilir ve bunları istediğiniz zaman yeniden oluşturabilirsiniz. İlkedeki bir anahtarı yeniden oluşturur veya değiştirirseniz, bu anahtarı temel alan daha önce verilen tüm belirteçler anında geçersiz hale gelir. Ancak, bu belirteçler temelinde oluşturulan devam eden bağlantılar, belirtecin süresi dolana kadar çalışmaya devam eder.

Service Bus ad alanı oluşturduğunuzda, ad alanı için RootManageSharedAccessKey adlı bir ilke kuralı otomatik olarak oluşturulur. Bu ilke, ad alanının tamamı için Yönet izinlerine sahiptir. Bu kurala bir yönetici kök hesabı gibi davranmanız ve bunu uygulamanızda kullanmamanız önerilir. Portaldaki ad alanının Paylaşılan erişim ilkeleri sekmesinde PowerShell veya Azure CLI aracılığıyla daha fazla ilke kuralı oluşturabilirsiniz.

SharedAccessAuthorizationRule nesnesinde kullanılan anahtarları düzenli aralıklarla yeniden oluşturmanızı öneririz. Anahtarları aşamalı olarak döndürebilmeniz için birincil ve ikincil anahtar yuvaları vardır. Uygulamanız genellikle birincil anahtarı kullanıyorsa, birincil anahtarı ikincil anahtar yuvasına kopyalayabilir ve yalnızca birincil anahtarı yeniden oluşturabilirsiniz. Daha sonra yeni birincil anahtar değeri, ikincil yuvadaki eski birincil anahtar kullanılarak sürekli erişime sahip olan istemci uygulamalarında yapılandırılabilir. Tüm istemciler güncelleştirildikten sonra, eski birincil anahtarı son olarak devre dışı bırakabilmek için ikincil anahtarı yeniden oluşturabilirsiniz.

Bir anahtarın gizliliğinin aşıldığını biliyor veya şüpheleniyorsanız ve anahtarları iptal etmek zorundaysanız, bir SharedAccessAuthorizationRule öğesinin hem PrimaryKey hem de SecondaryKey değerlerini yeni anahtarlarla değiştirerek yeniden oluşturabilirsiniz. Bu yordam, eski anahtarlarla imzalanan tüm belirteçleri geçersiz bırakır.

SAS kullanırken en iyi uygulamalar

Uygulamalarınızda paylaşılan erişim imzalarını kullandığınızda, iki olası riskin farkında olmanız gerekir:

  • SAS sızdırılırsa, bunu alan herkes tarafından kullanılabilir ve bu da Service Bus kaynaklarınızın güvenliğini tehlikeye atabilir.
  • bir istemci uygulamasına sağlanan SAS'nin süresi dolarsa ve uygulama hizmetinizden yeni bir SAS alamıyorsa uygulamanın işlevselliği engellenebilir.

Paylaşılan erişim imzalarını kullanmaya yönelik aşağıdaki öneriler bu riskleri azaltmaya yardımcı olabilir:

  • Gerekirse istemcilerin SAS'yi otomatik olarak yenilemesini sağlayın: İstemciler, SAS'yi sağlayan hizmet kullanılamıyorsa yeniden denemelere izin vermek için SAS'yi sona ermeden önce yenilemelidir. SAS'nizin son kullanma süresi içinde tamamlanması beklenen birkaç anlık, kısa süreli işlem için kullanılması amaçlanıyorsa SAS'nin yenilenmesi beklenmediğinden gereksiz olabilir. Ancak, SAS aracılığıyla düzenli olarak istekte bulunan bir istemciniz varsa, süre sonu olasılığı devreye girer. Önemli nokta, SAS'nin kısa süreli (daha önce belirtildiği gibi) gereksinimini, istemcinin yenilemeyi yeterince erken istediğinden emin olma gereksinimiyle (başarılı bir yenileme öncesinde SAS süresinin dolması nedeniyle kesinti yaşanmasını önlemek için) dengelemektir.
  • SAS başlangıç zamanına dikkat edin: SAS'nin başlangıç zamanını şimdi olarak ayarlarsanız, saat dengesizliği (farklı makinelere göre geçerli saat farklılıkları) nedeniyle ilk birkaç dakika boyunca aralıklı olarak hatalar görebilirsiniz. Genel olarak, başlangıç zamanını geçmişte en az 15 dakika olacak şekilde ayarlayın. Ya da hiç ayarlamayın; bu da her durumda hemen geçerli olmasını sağlar. Aynı durum genellikle süre sonu süresi için de geçerlidir. Herhangi bir istekte her iki yönde de 15 dakikaya kadar saat dengesizliği gözlemleyebilirsiniz.
  • Erişilecek kaynağa özgü olun: Güvenlik açısından en iyi yöntem, kullanıcıya gerekli en düşük ayrıcalıkları sağlamaktır. Bir kullanıcının tek bir varlığa yalnızca okuma erişimine ihtiyacı varsa, o kullanıcıya bu tek varlığa okuma erişimi verin ve tüm varlıklara okuma/yazma/silme erişimi vermeyin. Ayrıca SAS bir saldırganın elinde daha az güç olduğundan SAS tehlikeye atılırsa zararın daha az olmasına da yardımcı olur.
  • Her zaman SAS kullanmayın: Bazen Service Bus'ınıza yönelik belirli bir işlemle ilişkili riskler SAS'nin avantajlarından daha fazladır. Bu tür işlemler için, iş kuralı doğrulaması, kimlik doğrulaması ve denetimden sonra Service Bus'ınıza yazan bir orta katman hizmeti oluşturun.
  • Her zaman HTTP'leri kullanın: SAS oluşturmak veya dağıtmak için her zaman Https kullanın. BIR SAS HTTP üzerinden geçirilirse ve araya girilirse, ortadaki adam eklemesi yapan bir saldırgan SAS'yi okuyabilir ve daha sonra hassas verilerin güvenliğini tehlikeye atabilir veya kötü amaçlı kullanıcı tarafından veri bozulmasına izin vererek sas'ı hedeflenen kullanıcının sahip olabileceği gibi kullanabilir.

Paylaşılan Erişim İmzası kimlik doğrulaması yapılandırması

Service Bus ad alanları, kuyrukları veya konu başlıklarında Paylaşılan Erişim Yetkilendirme İlkesi'ni yapılandırabilirsiniz. Service Bus aboneliğinde yapılandırma şu anda desteklenmemektedir, ancak aboneliklere erişimin güvenliğini sağlamak için ad alanında veya konu başlığında yapılandırılmış kuralları kullanabilirsiniz.

Diagram that shows an example namespace with a few authorization rules.

Bu şekilde manageRuleNS, sendRuleNS ve listenRuleNS yetkilendirme kuralları hem kuyruğa Q1 hem de konu T1'e uygulanırken, listenRuleQ ve sendRuleQ yalnızca Q1 kuyruğuna, sendRuleT ise yalnızca T1 konusuna uygulanır.

Paylaşılan Erişim İmzası belirteci oluşturma

Yetkilendirme kuralı adı ve imzalama anahtarlarından birine erişimi olan tüm istemciler sas belirteci oluşturabilir. Belirteç, aşağıdaki biçimde bir dize oluşturularak oluşturulur:

SharedAccessSignature sig=<signature-string>&se=<expiry>&skn=<keyName>&sr=<URL-encoded-resourceURI>
  • se - Belirteç süre sonu anında. Belirtecin süresi dolduğunda 1 Ocak 1970 (UNIX dönemi) tarihindeki dönemden 00:00:00 UTC bu yana geçen saniyeleri yansıtan tamsayı.

  • skn - Yetkilendirme kuralının adı.

  • sr - Erişilmekte olan kaynağın URL ile kodlanmış URI'si.

  • sig - URL ile kodlanmış HMACSHA256 imzası. Karma hesaplama aşağıdaki sahte koda benzer ve ham ikili çıkışın base64 değerini döndürür.

    urlencode(base64(hmacsha256(urlencode('https://<yournamespace>.servicebus.windows.net/') + "\n" + '<expiry instant>', '<signing key>')))
    

Önemli

Farklı programlama dillerini kullanarak SAS belirteci oluşturma örnekleri için bkz . SAS belirteci oluşturma.

Belirteç, karma olmayan değerleri içerir, böylece alıcı karmayı aynı parametrelerle yeniden derleyebilir ve verenin geçerli bir imzalama anahtarına sahip olduğunu doğrular.

Kaynak URI'si, erişim talep edilen Service Bus kaynağının tam URI'sini oluşturur. Örneğin, http://<namespace>.servicebus.windows.net/<entityPath> veya sb://<namespace>.servicebus.windows.net/<entityPath>; diğer bir ifadeyle http://contoso.servicebus.windows.net/contosoTopics/T1/Subscriptions/S3.

URI yüzde kodlanmış olmalıdır.

İmzalama için kullanılan paylaşılan erişim yetkilendirme kuralı, bu URI tarafından belirtilen varlıkta veya hiyerarşik üst öğelerinden biri tarafından yapılandırılmalıdır. Örneğin, http://contoso.servicebus.windows.net/contosoTopics/T1 veya http://contoso.servicebus.windows.net önceki örnekte.

SAS belirteci, içinde signature-stringkullanılan ile önekli <resourceURI> tüm kaynaklar için geçerlidir.

Anahtarları yeniden oluşturma

Paylaşılan Erişim Yetkilendirme İlkesi'nde kullanılan anahtarları düzenli aralıklarla yeniden oluşturmanızı öneririz. Anahtarları aşamalı olarak döndürebilmeniz için birincil ve ikincil anahtar yuvaları vardır. Uygulamanız genellikle birincil anahtarı kullanıyorsa, birincil anahtarı ikincil anahtar yuvasına kopyalayabilir ve yalnızca birincil anahtarı yeniden oluşturabilirsiniz. Daha sonra yeni birincil anahtar değeri, ikincil yuvadaki eski birincil anahtar kullanılarak sürekli erişime sahip olan istemci uygulamalarında yapılandırılabilir. Tüm istemciler güncelleştirildikten sonra, eski birincil anahtarı son olarak devre dışı bırakabilmek için ikincil anahtarı yeniden oluşturabilirsiniz.

Anahtarın gizliliğinin aşıldığını biliyor veya şüpheleniyorsanız ve anahtarları iptal etmek zorundaysanız, Paylaşılan Erişim Yetkilendirme İlkesi'nin hem birincil anahtarını hem de ikincil anahtarını yeni anahtarlarla değiştirerek yeniden oluşturabilirsiniz. Bu yordam, eski anahtarlarla imzalanan tüm belirteçleri geçersiz bırakır.

Azure portalında birincil ve ikincil anahtarları yeniden oluşturmak için şu adımları izleyin:

  1. Azure portalında Service Bus ad alanına gidin.

  2. Soldaki menüden Paylaşılan Erişim İlkeleri'ni seçin.

  3. Listeden ilkeyi seçin. Aşağıdaki örnekte RootManageSharedAccessKey seçilidir.

  4. Birincil anahtarı yeniden oluşturmak için SAS İlkesi: RootManageSharedAccessKey sayfasında komut çubuğunda Birincil anahtarı yeniden oluştur'u seçin.

    Screenshot that shows how to regenerate a primary key.

  5. İkincil anahtarı yeniden oluşturmak için SAS İlkesi: RootManageSharedAccessKey sayfasında komut çubuğundan ... öğesini seçin ve ardından İkincil anahtarı yeniden oluştur'u seçin.

    Screenshot of SAS Policy page with Regenerate options selected.

Azure PowerShell kullanıyorsanız, Service Bus ad alanının birincil ve ikincil anahtarlarını yeniden oluşturmak için cmdlet'ini kullanınNew-AzServiceBusKey. Parametresini kullanarak -KeyValue , oluşturulan birincil ve ikincil anahtarlar için de değerler belirtebilirsiniz.

Azure CLI kullanıyorsanız, Service Bus ad alanının birincil ve ikincil anahtarlarını yeniden oluşturmak için komutunu kullanınaz servicebus namespace authorization-rule keys renew. Parametresini kullanarak --key-value , oluşturulan birincil ve ikincil anahtarlar için de değerler belirtebilirsiniz.

Service Bus ile Paylaşılan Erişim İmzası kimlik doğrulaması

Aşağıda açıklanan senaryo yetkilendirme kurallarının yapılandırılmasını, SAS belirteçlerinin oluşturulmasını ve istemci yetkilendirmesini içerir.

Yapılandırmayı gösteren ve SAS yetkilendirmesini kullanan bir Service Bus uygulaması örneği için bkz . Service Bus ile Paylaşılan Erişim İmzası kimlik doğrulaması.

Bir varlıkta Access Paylaşılan Erişim Yetkilendirme kuralları

Service Bus için yönetim kitaplıklarındaki kuyruklarda veya konu başlıklarında ilgili Paylaşılan Erişim Yetkilendirme Kuralları'na erişmek/bunları güncelleştirmek için alma/güncelleştirme işlemini kullanın. Bu kitaplıkları kullanarak kuyrukları veya konuları oluştururken kuralları da ekleyebilirsiniz.

Paylaşılan Erişim İmzası yetkilendirmesi kullanma

.NET, Java, JavaScript ve Python gibi resmi olarak desteklenen dillerden herhangi birinde Service Bus SDK'sını kullanan uygulamalar, istemci oluşturucuya geçirilen bağlantı dizesi aracılığıyla SAS yetkilendirmesini kullanabilir.

Bağlan ion dizeleri bir kural adı (SharedAccessKeyName) ve kural anahtarı (SharedAccessKey) veya daha önce verilmiş bir belirteç (SharedAccessSignature) içerebilir. Bunlar, bağlantı dizesi kabul eden herhangi bir oluşturucuya veya fabrika yöntemine geçirilen bağlantı dizesi mevcut olduğunda, SAS belirteci sağlayıcısı otomatik olarak oluşturulur ve doldurulur.

Service Bus abonelikleriyle SAS yetkilendirmesini kullanmak için, Service Bus ad alanında veya bir konuda yapılandırılan SAS anahtarlarını kullanabilirsiniz.

Paylaşılan Erişim İmzasını kullanma (HTTP düzeyinde)

Artık Service Bus'taki tüm varlıklar için Paylaşılan Erişim İmzaları oluşturmayı bildiğinize göre, bir HTTP POST gerçekleştirmeye hazırsınız:

POST https://<yournamespace>.servicebus.windows.net/<yourentity>/messages
Content-Type: application/json
Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<yourentity>&sig=<yoursignature from code above>&se=1438205742&skn=KeyName
ContentType: application/atom+xml;type=entry;charset=utf-8

Unutmayın, bu her şey için işe yarar. Kuyruk, konu veya abonelik için SAS oluşturabilirsiniz.

Bir gönderene veya istemciye SAS belirteci verirseniz, anahtarı doğrudan bu belirteçte yoktur ve karmayı almak için ters çeviremezler. Bu nedenle, nelere ve ne kadar süreyle erişebilecekleri üzerinde denetime sahipsiniz. İlkedeki birincil anahtarı değiştirirseniz, ilkeden oluşturulan Paylaşılan Erişim İmzalarının geçersiz kılınmış olması unutulmamalıdır.

Paylaşılan Erişim İmzasını kullanma (AMQP düzeyinde)

Önceki bölümde, Service Bus'a veri göndermek için BIR HTTP POST isteğiyle SAS belirtecinin nasıl kullanılacağını gördünüz. Bildiğiniz gibi, birçok senaryoda performans nedeniyle kullanılması tercih edilen protokol olan Gelişmiş İleti Kuyruğa Alma Protokolü'ni (AMQP) kullanarak Service Bus'a erişebilirsiniz. AMQP ile SAS belirteci kullanımı, 2013'ten bu yana taslak olarak çalışan ancak bugün Azure tarafından desteklenen AMQP Talep Tabanlı Güvenlik Sürüm 1.0 belgesinde açıklanmıştır.

Service Bus'a veri göndermeye başlamadan önce, yayımcının BIR AMQP iletisi içindeki SAS belirtecini $cbs adlı iyi tanımlanmış bir AMQP düğümüne göndermesi gerekir (tüm SAS belirteçlerini almak ve doğrulamak için hizmet tarafından kullanılan "özel" bir kuyruk olarak görebilirsiniz). Yayımcı AMQP iletisinin içinde ReplyTo alanını belirtmelidir; bu, hizmetin belirteç doğrulamasının sonucuyla yayımcıya yanıt verdiği düğüm (yayımcı ile hizmet arasında basit bir istek/yanıt deseni). Bu yanıt düğümü, AMQP 1.0 belirtimi tarafından açıklandığı gibi "uzak düğümün dinamik oluşturulması" hakkında konuşan "anında" oluşturulur. SAS belirtecinin geçerli olup olmadığını denetledikten sonra yayımcı ileri gidebilir ve hizmete veri göndermeye başlayabilir.

Aşağıdaki adımlar, AMQP.NET Lite kitaplığını kullanarak AMQP protokolü ile SAS belirtecinin nasıl göndereceğini gösterir. C# dilinde geliştirilen resmi Service Bus SDK'sını (örneğin, WinRT, .NET Compact Framework, .NET Micro Framework ve Mono üzerinde) kullanamıyorsanız kullanışlıdır. Bu kitaplık, HTTP düzeyinde (HTTP POST isteği ve "Yetkilendirme" üst bilgisi içinde gönderilen SAS belirteci ile) nasıl çalıştığını gördüğünüzden, talep tabanlı güvenliğin AMQP düzeyinde nasıl çalıştığını anlamanıza yardımcı olur. AMQP hakkında bu kadar derin bilgiye ihtiyacınız yoksa, .NET, Java, JavaScript, Python ve Go gibi desteklenen dillerden herhangi birinde resmi Service Bus SDK'sını kullanabilirsiniz. Bu, sizin için bunu yapar.

C#

/// <summary>
/// Send claim-based security (CBS) token
/// </summary>
/// <param name="shareAccessSignature">Shared access signature (token) to send</param>
private bool PutCbsToken(Connection connection, string sasToken)
{
    bool result = true;
    Session session = new Session(connection);

    string cbsClientAddress = "cbs-client-reply-to";
    var cbsSender = new SenderLink(session, "cbs-sender", "$cbs");
    var cbsReceiver = new ReceiverLink(session, cbsClientAddress, "$cbs");

    // construct the put-token message
    var request = new Message(sasToken);
    request.Properties = new Properties();
    request.Properties.MessageId = Guid.NewGuid().ToString();
    request.Properties.ReplyTo = cbsClientAddress;
    request.ApplicationProperties = new ApplicationProperties();
    request.ApplicationProperties["operation"] = "put-token";
    request.ApplicationProperties["type"] = "servicebus.windows.net:sastoken";
    request.ApplicationProperties["name"] = Fx.Format("amqp://{0}/{1}", sbNamespace, entity);
    cbsSender.Send(request);

    // receive the response
    var response = cbsReceiver.Receive();
    if (response == null || response.Properties == null || response.ApplicationProperties == null)
    {
        result = false;
    }
    else
    {
        int statusCode = (int)response.ApplicationProperties["status-code"];
        if (statusCode != (int)HttpStatusCode.Accepted && statusCode != (int)HttpStatusCode.OK)
        {
            result = false;
        }
    }

    // the sender/receiver might be kept open for refreshing tokens
    cbsSender.Close();
    cbsReceiver.Close();
    session.Close();

    return result;
}

yöntemi, PutCbsToken() hizmete yönelik TCP bağlantısını ve gönderilecek SAS belirteci olan sasToken parametresini temsil eden bağlantıyı (AMQP .NET Lite kitaplığı tarafından sağlanan AMQP bağlantı sınıfı örneği) alır.

Not

Bağlantının SASL kimlik doğrulama mekanizması ANONIM olarak ayarlanmış (SAS belirtecini göndermeniz gerekmediğinde kullanılan kullanıcı adı ve parola ile varsayılan PLAIN değil) ile oluşturulması önemlidir.

Ardından, yayımcı SAS belirtecini göndermek ve hizmetten yanıtı (belirteç doğrulama sonucu) almak için iki AMQP bağlantısı oluşturur.

AMQP iletisi bir özellik kümesi ve basit bir iletiden daha fazla bilgi içerir. SAS belirteci, iletinin gövdesidir (oluşturucusunu kullanarak). "ReplyTo" özelliği, alıcı bağlantısında doğrulama sonucunu almak için düğüm adına ayarlanır (isterseniz adını değiştirebilirsiniz ve hizmet tarafından dinamik olarak oluşturulur). Son üç uygulama/özel özellik, hizmet tarafından yürütülmesi gereken işlem türünü belirtmek için kullanılır. CBS taslak belirtiminde açıklandığı gibi, bunlar işlem adı ("put-token"), belirteç türü (bu örnekte aservicebus.windows.net:sastoken) ve belirtecin uygulandığı hedef kitlenin "adı" (varlığın tamamı) olmalıdır.

Publisher gönderen bağlantısında SAS belirtecini gönderdikten sonra, yayımcının alıcı bağlantısındaki yanıtı okuması gerekir. Yanıt, HTTP durum koduyla aynı değerleri içerebilen "status-code" adlı bir uygulama özelliğine sahip basit bir AMQP iletisidir.

Service Bus işlemleri için gereken haklar

Aşağıdaki tabloda, Service Bus kaynaklarındaki çeşitli işlemler için gereken erişim hakları gösterilmektedir.

İşlem Talep Gerekli Talep Kapsamı
Ad alanı
Ad alanında yetkilendirme kuralını yapılandırma Yönetme Herhangi bir ad alanı adresi
Hizmet Kayıt Defteri
Özel İlkeleri Listeleme Yönetme Herhangi bir ad alanı adresi
Ad alanında dinlemeye başlama Dinle Herhangi bir ad alanı adresi
Ad alanında dinleyiciye ileti gönderme Gönder Herhangi bir ad alanı adresi
Kuyruk
Kuyruk oluştur Yönetme Herhangi bir ad alanı adresi
Bir kuyruk silme Yönetme Geçerli bir kuyruk adresi
Kuyrukları listeleme Yönetme /$Resources/Kuyruklar
Kuyruk açıklamasını alma Yönetme Geçerli bir kuyruk adresi
Kuyruk için yetkilendirme kuralını yapılandırma Yönetme Geçerli bir kuyruk adresi
Kuyruğa gönder Gönder Geçerli bir kuyruk adresi
Kuyruktan ileti alma Dinle Geçerli bir kuyruk adresi
İletiyi peek-lock modunda aldıktan sonra iletileri bırakma veya tamamlama Dinle Geçerli bir kuyruk adresi
İletiyi daha sonra almak üzere erteleme Dinle Geçerli bir kuyruk adresi
İletiyi geçersiz kıl Dinle Geçerli bir kuyruk adresi
İleti kuyruğu oturumuyla ilişkili durumu alma Dinle Geçerli bir kuyruk adresi
İleti kuyruğu oturumuyla ilişkilendirilmiş durumu ayarlama Dinle Geçerli bir kuyruk adresi
Daha sonra teslim için bir ileti zamanlama Dinle Geçerli bir kuyruk adresi
Konu
Konu oluşturma Yönetme Herhangi bir ad alanı adresi
Konuyu silme Yönetme Geçerli bir konu adresi
Konuları listeleme Yönetme /$Resources/Konular
Konu açıklamasını alma Yönetme Geçerli bir konu adresi
Bir konu için yetkilendirme kuralını yapılandırma Yönetme Geçerli bir konu adresi
Konuya gönder Gönder Geçerli bir konu adresi
Abonelik
Abonelik oluşturma Yönetme Herhangi bir ad alanı adresi
Aboneliği silme Yönetme .. /myTopic/Subscriptions/mySubscription
Abonelikleri listeleme Yönetme .. /myTopic/Abonelikler
Abonelik açıklamasını alma Yönetme .. /myTopic/Subscriptions/mySubscription
İletiyi peek-lock modunda aldıktan sonra iletileri bırakma veya tamamlama Dinle .. /myTopic/Subscriptions/mySubscription
İletiyi daha sonra almak üzere erteleme Dinle .. /myTopic/Subscriptions/mySubscription
İletiyi geçersiz kıl Dinle .. /myTopic/Subscriptions/mySubscription
Konu oturumuyla ilişkili durumu alma Dinle .. /myTopic/Subscriptions/mySubscription
Konu oturumuyla ilişkilendirilmiş durumu ayarlama Dinle .. /myTopic/Subscriptions/mySubscription
Kurallar
Kural oluşturun Dinle .. /myTopic/Subscriptions/mySubscription
Kuralı silme Dinle .. /myTopic/Subscriptions/mySubscription
Kuralları listeleme Yönetme veya Dinleme .. /myTopic/Subscriptions/mySubscription/Rules

Sonraki adımlar

Service Bus mesajlaşma hizmeti hakkında daha fazla bilgi edinmek için aşağıdaki konu başlıklarına bakın.