Хранилище BLOB-объектов Azure. Получить доступ к контейнеру с токеном SAS

Я пытаюсь получить доступ к контейнеру хранилища больших двоичных объектов, это мой код:

from datetime import datetime
from azure.storage.blob import BlobServiceClient
from azure.storage.blob import generate_container_sas
from azure.storage.blob import ContainerSasPermissions

blob_storage_account = 'account name'
blob_storage_container = 'container name'
blob_storage_key = 'account key'

permission = ContainerSasPermissions(read=True, write=True, delete=True, 
                                 list=True,delete_previous_version=True, tag=True)

token = generate_container_sas(account_name=blob_storage_account,
                        container_name=blob_storage_container,
                        account_key=blob_storage_key,
                        permission=permission,
                        expiry='2050-2-25')

url = f'https://{blob_storage_account}.blob.core.windows.net'
blob_service_client = BlobServiceClient(url, credential=token)

container = blob_service_client.get_container_client(blob_storage_container)
container.list_blobs().next()

Но я получаю эту ошибку, когда использую метод list_blobs().next():

azure.core.exceptions.ClientAuthenticationError: Server failed to authenticate the request. Make sure 
the value of Authorization header is formed correctly including the signature.
RequestId:42251c89-501e-0056-5156-0af114000000
Time:2021-02-24T02:41:46.8149241Z
ErrorCode:AuthenticationFailed
Error:None

Я прочитал этот вопрос , и они ссылаются на сброс или настройку часового пояса, но это не сработало


person Jose    schedule 24.02.2021    source источник
comment
Я думаю, что здесь был дан ответ: stackoverflow.com/questions/46910151/   -  person WaitingForGuacamole    schedule 24.02.2021


Ответы (1)


expiry='2050-2-25' неверно, его нужно отформатировать как время UTC, например 2021-02-24T15:33:13Z.

Кстати, вы можете получить container_client напрямую с помощью ContainerClient.from_container_url(...).

from datetime import datetime, timedelta
from azure.storage.blob import BlobServiceClient
from azure.storage.blob import generate_container_sas
from azure.storage.blob import ContainerSasPermissions
from azure.storage.blob import ContainerClient

blob_storage_account = ''
blob_storage_container = ''
blob_storage_key = ''

permission = ContainerSasPermissions(read=True, write=True, delete=True, 
                                 list=True,delete_previous_version=True, tag=True)
sas_token = generate_container_sas(
        account_name=blob_storage_account,
        container_name=blob_storage_container,
        account_key=blob_storage_key,
        permission=permission,
        expiry='2021-02-24T15:33:13Z'
    )
print(sas_token)

url = "https://"+blob_storage_account+".blob.core.windows.net/"+blob_storage_container
container_client = ContainerClient.from_container_url(
    container_url=url,
    credential=sas_token
)
container_client.list_blobs().next()

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

person Pamela Peng    schedule 24.02.2021
comment
Если мой ответ полезен, пожалуйста, примите его как ответ, спасибо. - person Pamela Peng; 24.02.2021
comment
Охххх, да. В этом была проблема. Спасибо, Памела. С уважением - person Jose; 24.02.2021