【发布时间】:2015-02-05 12:33:56
【问题描述】:
我在我的事件中心发布者代码中使用 SAS 令牌身份验证和设备 ID(或发布者 ID)。但是我发现即使我已经使用设备 ID 进行了身份验证,也可以使用“CreatePartitionedSender”客户端将事件发送到任何分区 ID。而我不希望在同一分区中发布两个不同的设备 ID 事件。我们是否可以添加一些自定义“授权”代码以及 SAS 身份验证,以允许对任何设备进行有限的分区访问。
向设备和分区 ID 组合添加授权背后的想法是为多个租户提供单个事件中心。如果我遗漏了什么,请告知。
请看下面的发布者代码sn-p:
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);
【问题讨论】:
-
请参阅stackoverflow.com/questions/28292330/… 了解将要共享分区的部分,除非您跳过箍。我自己没有使用 SAS 令牌,我只是猜测,但在 SAS 中使用受限发布者 URI (
.servicebus.windows.net/ /publishers/ ) URI 可能会提供您需要的限制。从未使用过它,但文档对我暗示了这一点。
标签: azure azure-eventhub