Как сгенерировать токен SAS для подписки ServiceBus с помощью python azure sdk?

Я создаю службу, которая должна создавать во время выполнения пространство имен, тему и подписки служебной шины. Мне нужно создать токен sas (или URL-адрес) для подписки, созданной службой, и отправить ее другим службам в системе.

Как я могу сгенерировать токен sas с помощью sdk azure python


person Cheick    schedule 05.06.2020    source источник


Ответы (2)


См. Следующий как автономный пример:

Как всегда, полное раскрытие информации, я один из тех, кто поддерживает python azure servicebus lib, поэтому не стесняйтесь кричать, если что-то из этого неясно.

from azure.mgmt.servicebus import ServiceBusManagementClient
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.servicebus.models import AccessRights

client_id = 'REPLACEME'
client_secret = 'REPLACEME'
subscription = 'REPLACEME'
tenant = 'REPLACEME'
resource_group_name = 'REPLACEME'
namespace_name = 'REPLACEME'
authorization_rule_name = 'REPLACEME'
topic_name = 'REPLACEME'
subscription_name = 'REPLACEME'
authorization_rule_rights = [AccessRights.manage]

credential = ServicePrincipalCredentials(client_id, client_secret, tenant=tenant)

client = ServiceBusManagementClient(credential, subscription)

client.namespaces.create_or_update(resource_group_name, namespace_name)
client.topics.create_or_update(resource_group_name, namespace_name, topic_name)
client.subscriptions.create_or_update(resource_group_name, namespace_name, topic_name, subscription_name)
client.topics.create_or_update_authorization_rule(resource_group_name, namespace_name, topic_name, authorization_rule_name, authorization_rule_rights)
rule = client.topics.list_keys(resource_group_name, namespace_name, topic_name, authorization_rule_name)

Если вы хотите сгенерировать токен SAS для служебной шины с помощью Python, обратитесь к документ.

person Kibrantn    schedule 08.06.2020

Например (я создаю токен sas для темы)

Тестовое задание

  1. Я хотел бы отметить в дополнение к точному ответу Джима: к этому можно также подойти с помощью azure-mgmt -servicebus SDK. Это потребует использования
    sb_name='<service bus name>'
    topic='<topic name>'
    url=urllib.parse.quote_plus("https://{}.servicebus.windows.net/{}".format(sb_name,topic))
    sas_value='your sas policy key value'
    sas_name='your sas policy'
    expiry = str(int(time.time() + 10000))
    to_sign =(url + '\n' + expiry).encode('utf-8') 
    sas = sas_value.encode('utf-8')
    signed_hmac_sha256 = hmac.HMAC(sas, to_sign, hashlib.sha256)
    signature = urllib.parse.quote(base64.b64encode(signed_hmac_sha256.digest()))
    auth_format = 'SharedAccessSignature sig={0}&se={1}&skn={2}&sr={3}'
    auth=auth_format.format(signature,expiry,sas_name,url)
    print(auth)
    
    
    для аутентификации, но даст немного более структурированный поток; не только для создайте пространство имен и тема / подписка, но для создания или обновления правил авторизации для данной темы или само пространство имен, а затем получить ключи программно.
sb_name='<service bus name>'
topic='<topic name>'
url=urllib.parse.quote_plus("https://{}.servicebus.windows.net/{}".format(sb_name,topic))
sas_value='your sas policy key value'
sas_name='your sas policy'
expiry = str(int(time.time() + 10000))
to_sign =(url + '\n' + expiry).encode('utf-8') 
sas = sas_value.encode('utf-8')
signed_hmac_sha256 = hmac.HMAC(sas, to_sign, hashlib.sha256)
signature = urllib.parse.quote(base64.b64encode(signed_hmac_sha256.digest()))
auth_format = 'SharedAccessSignature sig={0}&se={1}&skn={2}&sr={3}'
auth=auth_format.format(signature,expiry,sas_name,url)
print(auth)

  1. а. Отправить сообщение

    введите здесь описание изображения

    
    
    POST https://<yournamespace>.servicebus.windows.net/<topic>/messages
    Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<yourentity>&sig=<yoursignature from code above>&se=1438205742&skn=KeyName
    ContentType: application/atom+xml;type=entry;charset=utf-8
    
    <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">This is a message.</string> 
    

    б. Получить сообщение

    введите здесь описание изображения

    DELETE https://{serviceNamespace}.servicebus.windows.net/{topicPath}/subscriptions/{subscriptionName}/messages/head   
    
    Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<yourentity>&sig=<yoursignature from code above>&se=1438205742&skn=KeyName
    

    Создать токен SAS

person Jim Xu    schedule 08.06.2020