Я использую аутентификацию токена SAS вместе с идентификатором устройства (или идентификатором издателя) в моем коде издателя концентратора событий. Но я вижу, что можно отправить событие на любой идентификатор раздела с помощью клиента CreatePartitionedSender, даже если я прошел аутентификацию с использованием идентификатора устройства. Принимая во внимание, что я не хочу, чтобы два разных события публикации идентификаторов устройств в одном разделе. Возможно ли, что мы можем добавить некоторый пользовательский код «авторизации вместе с аутентификацией SAS, чтобы разрешить ограниченный доступ к разделу для любого устройства.
Идея добавления авторизации к комбинации устройства и идентификатора раздела заключалась в том, чтобы разместить один концентратор событий для нескольких клиентов. Пожалуйста, сообщите, если я чего-то упускаю.
См. Ниже фрагмент кода для издателя:
var publisherId = "1d8480fd-d1e7-48f9-9aa3-6e627bd38bae";
string token = SharedAccessSignatureTokenProvider.GetPublisherSharedAccessSignature(
new Uri("sb://anyhub-ns.servicebus.windows.net/"),
eventHubName, publisherId, "send",
sasKey,
new TimeSpan(0, 5, 0));
var factory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("sb", "anyhub-ns", ""), new MessagingFactorySettings
{
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(token),
TransportType = TransportType.Amqp
});
var client = factory.CreateEventHubClient(String.Format("{0}/publishers/{1}", eventHubName, publisherId));
var message = "Event message for publisher: " + publisherId;
Console.WriteLine(message);
var eventData = new EventData(Encoding.UTF8.GetBytes(message));
await client.SendAsync(eventData);
await client.CreatePartitionedSender("5").SendAsync(eventData);
await client.CreatePartitionedSender("6").SendAsync(eventData);