1

我创建了一个 Azure 事件中心 SAS 令牌,例如

let token =
    SharedAccessSignatureTokenProvider.GetSharedAccessSignature(
        "{myPolicyName}",
        "{myPolicyKey}",
        "https://{serviceBusName}.servicebus.windows.net/{eventHubName}/publishers/{publisherName}",
        (TimeSpan(0, 0, 5)))

然后是 .NET SDK 的连接字符串:-

let connectionString =
    ServiceBusConnectionStringBuilder.CreateUsingSharedAccessSignature(
        Uri "sb://{serviceBusName}.servicebus.windows.net/",
        "{eventHubName}",
        "{publisherName}",
        token)
EventHubSender.CreateFromConnectionString(connectionString).Send(myData)

但是,即使 5 秒过去了,我仍然可以使用令牌发送数据。

4

3 回答 3

1

这是意料之中的。Azure 服务总线服务的基于 SaS 令牌的授权不支持少于 5 分钟的令牌寿命。这意味着,令牌不能保证在 5 分钟之前过期。一般来说 - 跨机器的时钟偏差会改变这个问题的动态。

但是,要实现上述场景,由于您将完全控制 Clock - 您可以在 5 秒后发出RevokePublisher调用 - 这将立即生效。使用该特定 PublisherID 的所有现有客户端都将被服务关闭。

这里的一个问题是 - 每个 revoke-publisher 调用实际上都会向该 eventthub 的 RevocationList 添加一个条目。每个发送调用都会与该列表进行最佳比较 - 因此,请务必定期清理撤销列表 - 否则如果增长非常大,将影响 EventHub 发送延迟。

在这种方法中 - 请记住,您正在使用第二个访问控制旋钮 - 即 Publisher 以及第一个 - SaSToken。无论 Token 的生命周期是什么——一旦你在 Publisher 上调用了 Revoke——来自该发布者的所有 Send 调用都将被拒绝。一次,令牌寿命到期 - 删除已删除的 Publisher(以清理 RevocationList)。

!斯里

于 2015-11-25T04:50:34.270 回答
0

SAS 取决于时钟是否同步。如果生成时间戳的位置和事件中心之间存在任何差异,则时间可能不会按照您期望的方式排列。

作为一种解决方法,有时人们会在短时间内缓冲 SAS 开始/结束,以解决时钟漂移问题。

于 2015-11-23T17:31:47.717 回答
0

好的。它最终会过期 - 只是不会在指定时间之后立即过期。

于 2015-11-23T16:18:51.700 回答