将 SAS 令牌与 Azure ServiceBus 结合使用
Using SAS Token with Azure ServiceBus
我正在使用新的 Azure ServiceBus SDK,它是 .NET Standard 2.0,我发现很难使用 SAS 令牌。以前,它曾经是 MessagingFactory,但在新的 SDK 中它不存在了。 ServiceBusConnectionStringBuilder 有 SAS 令牌,但它也需要一个 connectionString。
基本上,我想使用 SAS 策略(用于发送的发送规则和用于接收的接收规则)和根据这些策略的连接字符串创建的 SAS 令牌进行发送和接收。
我能够生成 SAS 令牌,但找不到使用此令牌创建 QueueClient 的方法。
我最终使用了以下使用 SharedAccess 签名的 ServiceBusConnectionStringBuilder
覆盖:
public ServiceBusConnectionStringBuilder (string endpoint, string entityPath, string sharedAccessSignature);
基于此,这是我编写的代码。这首先使用 RootManagedAccessKey
生成一个有效期为一个小时的 SAS 令牌,然后使用该令牌将消息发送到队列。
using System;
using System.Text;
using Microsoft.Azure.ServiceBus;
using Microsoft.Azure.ServiceBus.Primitives;
namespace SO60273377
{
class Program
{
static void Main(string[] args)
{
var endpoint = "sb://<namespace>.servicebus.windows.net/";
var queueName = "test";
var keyName = "RootManageSharedAccessKey";
var keyValue = "<key>";
var validityDuration = TimeSpan.FromHours(1);
TokenScope tokenScope = TokenScope.Entity;
var provider = (SharedAccessSignatureTokenProvider) TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, keyValue, validityDuration, tokenScope);
var token = provider.GetTokenAsync(endpoint+queueName, validityDuration).GetAwaiter().GetResult();
var sasToken = token.TokenValue;
Console.WriteLine("SAS Token: " + sasToken);
var serviceBusConnectionStringBuilder = new ServiceBusConnectionStringBuilder(endpoint, queueName, sasToken);
QueueClient client = new QueueClient(serviceBusConnectionStringBuilder, ReceiveMode.PeekLock);
client.SendAsync(new Message(Encoding.UTF8.GetBytes("This is a test"))).GetAwaiter().GetResult();
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
}
}
我正在使用新的 Azure ServiceBus SDK,它是 .NET Standard 2.0,我发现很难使用 SAS 令牌。以前,它曾经是 MessagingFactory,但在新的 SDK 中它不存在了。 ServiceBusConnectionStringBuilder 有 SAS 令牌,但它也需要一个 connectionString。
基本上,我想使用 SAS 策略(用于发送的发送规则和用于接收的接收规则)和根据这些策略的连接字符串创建的 SAS 令牌进行发送和接收。
我能够生成 SAS 令牌,但找不到使用此令牌创建 QueueClient 的方法。
我最终使用了以下使用 SharedAccess 签名的 ServiceBusConnectionStringBuilder
覆盖:
public ServiceBusConnectionStringBuilder (string endpoint, string entityPath, string sharedAccessSignature);
基于此,这是我编写的代码。这首先使用 RootManagedAccessKey
生成一个有效期为一个小时的 SAS 令牌,然后使用该令牌将消息发送到队列。
using System;
using System.Text;
using Microsoft.Azure.ServiceBus;
using Microsoft.Azure.ServiceBus.Primitives;
namespace SO60273377
{
class Program
{
static void Main(string[] args)
{
var endpoint = "sb://<namespace>.servicebus.windows.net/";
var queueName = "test";
var keyName = "RootManageSharedAccessKey";
var keyValue = "<key>";
var validityDuration = TimeSpan.FromHours(1);
TokenScope tokenScope = TokenScope.Entity;
var provider = (SharedAccessSignatureTokenProvider) TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, keyValue, validityDuration, tokenScope);
var token = provider.GetTokenAsync(endpoint+queueName, validityDuration).GetAwaiter().GetResult();
var sasToken = token.TokenValue;
Console.WriteLine("SAS Token: " + sasToken);
var serviceBusConnectionStringBuilder = new ServiceBusConnectionStringBuilder(endpoint, queueName, sasToken);
QueueClient client = new QueueClient(serviceBusConnectionStringBuilder, ReceiveMode.PeekLock);
client.SendAsync(new Message(Encoding.UTF8.GetBytes("This is a test"))).GetAwaiter().GetResult();
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
}
}