首页 > 解决方案 > 在 Azure Python SDK 中,是否可以生成特定于 ServiceBus 主题的 SAS 令牌?

问题描述

我正在使用 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 令牌。在线文档似乎暗示这是不可能的,但我想我还是会问。

标签: python-3.xazureazureservicebusazure-sdk-pythonsas-token

解决方案


好消息和坏消息。虽然肯定有方法可以为每个主题生成 SAS 令牌,但我不相信您可以使用您正在使用的 API 来做到这一点。通过 control_client 实现的 ServiceBusService 基本上是我们的“双重遗产”SDK,并且已经过时且已被有效弃用。

也就是说,我将向您指出我们当前的azure-mgmt-servicebus包。有了它,您可以以类似的方式创建主题,但对您的目的更重要的是,您可以创建一个授权规则(您可能只想为其提供侦听器权限),然后访问主题的密钥以在需要时以编程方式使用它们。

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

虽然没有官方内置实用程序可以从 SAS 密钥生成 SAS 令牌,但希望这是一种可行的方法,让我在这里提供一些面包屑导航。(这演示了使用 SAS 密钥生成然后使用 SAS 令牌验证我们即将推出的 GA 版本,您可以根据需要使用或多或少,但用于您的目的的密钥是generate_sas_token

如果需要任何澄清或我误解了您的问题,请不要犹豫,如果您将来遇到任何问题,我也会提及我们的 github 。(完全免责声明,我是这个 sdk 的维护者)


推荐阅读