在 Azure Python SDK 中,是否可以生成特定于 ServiceBus 主题的 SAS 令牌?

In the Azure Python SDK, is it possible to generate SAS tokens specific to a ServiceBus topic?

我正在使用 Python 3.8 和 azure-servicebus v0.50.3。我想为我创建的每个主题生成一个只读的 SAS 令牌。到目前为止我已经想通了我可以创建这样的主题...

sbs = ServiceBusService(service_namespace,
                        shared_access_key_name=key_name,
                        shared_access_key_value=key_value)
...

sbs.create_topic(name)

但是,我不清楚如何(或者是否可能)使用现有 API 为我创建的每个主题生成 SAS 令牌。在线文档似乎暗示这是不可能的,但我还是想问一下。

好消息和坏消息。虽然确实有一些方法可以为每个主题生成 SAS 令牌,但我不相信您可以使用您正在使用的 API 来做到这一点。通过 control_client 的 ServiceBusService 基本上是我们的“double-legacy”SDK,并且非常过时并且实际上已弃用。

也就是说,我会指出您当前的 azure-mgmt-servicebus package. With it you can create topics in a similar fashion, but more important to your purposes you can create an authorization rule (you'd likely want to give it only Listener rights) and then access the topic's keys 以在需要时以编程方式利用它们。

老实说,我不确定您是否将 SAS 密钥通俗地称为令牌(坦率地说,我经常翻转命名)所以为了涵盖我的所有基础,我还将在下面详细说明您如何转变将密钥转换为临时令牌,但如果您不需要它,可以跳过下一段。

虽然没有官方的 built-in 实用程序可以从 SAS 密钥生成 SAS 令牌,但希望这是一种可行的方法,让我提供一些面包屑来说明它的样子 here。 (这演示了使用 SAS 密钥生成然后使用 SAS 令牌对我们的 up-coming-GA-version 进行身份验证,您可以根据需要获取尽可能多的或尽可能少的密钥,但用于您目的的密钥将是 generate_sas_token)

如果需要任何澄清或者我误解了您的问题,请不要犹豫,如果您以后 运行 遇到任何问题,我也会提到 our github。 (完全免责声明,我是此 SDK 的维护者)