Как создать токен Azure ServiceBus SaS с правами только на публикацию? - PullRequest
0 голосов
/ 21 ноября 2018

Мне нужно программно создать токен SaS для служебной шины с пакетом nuget Microsoft.Azure.ServiceBus 3.X для работы со стандартной библиотекой .NET.

Я могу успешно создать и использовать токен дляподписывайтесь и публикуйте в сервисной шине.Я не вижу опции, в которой я могу ограничить токен, чтобы иметь возможность только публиковать.

TokenProvider td = SharedAccessSignatureTokenProvider.CreateSharedAccessSignatureTokenProvider(policyName, policyKey, expireTimeSpan);
var token = await td.GetTokenAsync($"{path}{topic}", expireTimeSpan);

Я бы хотел ограничить права на этот токен, чтобы иметь возможность только публиковать в теме, ноне подписывайтесьВозможно ли это, и если да, то как я могу это сделать?

1 Ответ

0 голосов
/ 21 ноября 2018

Возможно ли это, и если да, то как я могу это сделать?

Если я правильно понимаю, вам нужно создать политику с правом [send].А затем используйте policyName и сгенерированный ключ для создания токена sas.

enter image description here

Права, предоставляемые правилом политики, могут быть комбинацией:

  • 'Отправить ' - Предоставляет право на отправку сообщений объекту
  • ' Прослушивание ' - Предоставляет право на прослушивание (ретрансляция) или получение (очередь, подписка) и все связанные сообщения.обработка
  • 'Управление' - Предоставляет право управлять топологией пространства имен, включая создание и удаление объектов

Для получения дополнительной информации, пожалуйста,обратитесь к этому документу .

Обновление:

Мы могли бы использовать Microsoft.Azure.Management.ServiceBus.Fluent создать политику.

var authorizationRuleName = "xxx"; //policy name
var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"D:\Tom\Documents\azureCred.txt");
var restClient = RestClient.Configure().WithEnvironment(AzureEnvironment.AzureGlobalCloud)
                .WithCredentials(credentials)
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Build();
System.Threading.CancellationToken cancellationToken = new System.Threading.CancellationToken();
ServiceBusManagementClient client = new ServiceBusManagementClient(restClient)
            {
                SubscriptionId = subscriptionId
            };
List<AccessRights?> list = new List<AccessRights?> { AccessRights.Send};
//create policy
SharedAccessAuthorizationRuleInner result = client.Namespaces.CreateOrUpdateAuthorizationRuleAsync(resourceGroupName, nameSpace, authorizationRuleName, list, cancellationToken).Result;
//get key
var key = client.Namespaces.ListKeysAsync(resourceGroupName, nameSpace, authorizationRuleName).Result?.PrimaryKey;

Как создать файл azureCred, обратитесь к этому документу .

...