#python-3.x #azure #azureservicebus #azure-sdk-python #sas-token
#python-3.x #azure #azureservicebus #azure-sdk-python #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 для каждой темы, которую я создаю. Похоже, что онлайн-документация подразумевает, что это невозможно, но я все равно подумал, что спрошу.
Ответ №1:
Хорошие новости и плохие новости. Хотя, безусловно, существуют способы генерации токенов SAS для каждой темы, я не верю, что вы сможете это сделать с помощью используемого вами API. ServiceBusService через control_client — это, по сути, наш SDK с двойным наследием, который очень устарел и фактически устарел.
Тем не менее, я бы указал вам на наш текущий пакет azure-mgmt-servicebus. С его помощью вы можете создавать темы аналогичным образом, но, что более важно для ваших целей, вы можете создать правило авторизации (вероятно, вы захотите предоставить ему только права прослушивателя), а затем получить доступ к ключам темы, чтобы при необходимости программно использовать их.
Честно говоря, я не был уверен, что вы ссылаетесь на ключи SAS в разговорной речи как на токены (честно говоря, я постоянно меняю имена), поэтому, чтобы охватить все мои базы, я также подробно расскажу ниже, как превратить ключ в временный токен, но если вам это не нужно, вы можете пропуститьследующий абзац.
Хотя официальной встроенной утилиты для генерации токенов SAS из ключа SAS не существует, в надежде, что это работоспособный подход, позвольте мне представить некоторые примеры того, как это будет выглядеть здесь. (Это демонстрирует использование ключа SAS для генерации и последующей аутентификации нашей обновляемой версии GA с помощью токена SAS, вы бы взяли столько или столько, сколько вам нужно, но ключ для ваших целей будет generate_sas_token
следующим)
Не стесняйтесь кричать, если требуется какая-либо ясность или если я неправильно понял вашу проблему, я бы также упомянул наш github, если у вас возникнут какие-либо проблемы в будущем. (полный отказ от ответственности, я являюсь сопровождающим для этого sdk)
Комментарии:
1. Спасибо за это! Я рад отказаться от устаревшего SDK, просто у меня есть пара вопросов по этому поводу. Ранее для ServiceBusService требовалось пространство имен, имя ключа общего доступа и значение ключа общего доступа. В вашем примере кода здесь — gist.github.com/KieranBrantnerMagee / … , я не совсем понимаю, где именно, если я все еще использую эту информацию или мне нужно получить или сгенерировать другую информацию с портала Azure. По-прежнему ли имя и значение ключа общего доступа применяются в новом (не устаревшем) SDK?
2. Итак, в моем примере показано ТОЛЬКО, как генерировать токены SAS из ключей SAS, а затем использовать их для клиента плоскости данных. К вашему мнению о замене устаревшего API, к сожалению, azure-mgmt-servicebus и другие библиотеки ARM не поддерживают SAS, только учетные данные azure-identity. Наша библиотека плоскости данных (azure-servicebus) по-прежнему будет разрешать SAS, но сторона ARM (azure-mgmt-servicebus) пытается сделать azure-identity счастливым путем, см. Документы здесь .
3. Краткое разъяснение терминологии: если мы используем azure-identity вместо SAS, какой правильный термин использовать для описания создания аутентификации только для прослушивания при создании темы служебной шины? Если мы не используем токены SAS, что мы используем?
4. Ага, возможно, я смогу прояснить путаницу. 1. azure-identity используется вместо SAS для использования
azure-mgmt-servicebus
библиотеки, которая предназначена для создания тем, создания ключей SAS темы и т. Д. Как следует из названия, функции «управления». 2. дляazure-servicebus
библиотеки, кода, который вы используете для фактической отправки / получения сообщений с темой, вы можете использовать ключи SAS только для прослушивания (или токены SAS, полученные из этих ключей) для аутентификации.5. В чем разница между способом создания клиента службы (ServiceBusClient) в вашем примере кода — gist.github.com/KieranBrantnerMagee / … и документ, на который вы ссылаетесь … learn.microsoft.com/en-us/python/api/overview/azure /… ? Это просто два разных способа добраться до одного и того же?