我在我的事件中心发布者代码中使用 SAS 令牌身份验证和设备 ID(或发布者 ID)。但是我发现即使我已经使用设备 ID 进行了身份验证,也可以使用“CreatePartitionedSender”客户端将事件发送到任何分区 ID。而我不希望在同一分区中发布两个不同的设备 ID 事件。我们是否可以添加一些自定义“授权”代码以及 SAS 身份验证,以允许对任何设备进行有限的分区访问。
向设备和分区 ID 组合添加授权背后的想法是为多个租户提供单个事件中心。如果我遗漏任何东西,请告知。
请参阅下面的发布者代码段:
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);