python - Azure-blob-存储。使用 SAS token 访问容器

标签 python azure sas-token

我正在尝试访问 blob 存储容器,这是我的代码:

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

我读了这个question ,他们指的是重置或调整时区,但这不起作用

最佳答案

expiry='2050-2-25' 不正确,需要将其格式设置为 UTC 时间,如“2021-02-24T15:33:13Z”。

顺便说一句,您可以使用ContainerClient.from_container_url(...)直接获取container_client

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()

enter image description here

关于python - Azure-blob-存储。使用 SAS token 访问容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66344049/

相关文章:

python - pandas.read_csv() 将 TRUE 解释为 bool 值,我需要一个字符串

python - 如何将急切执行中的模型转换为静态图并保存在 .pb 文件中?

python - 为什么在同一端口上但来自不同组的多播消息会合并在一起?

python - 如何使用boto3更新dynamodb中一个项目的几个属性

powershell - 如何以编程方式从 Azure AD 库添加应用程序

python - 使用 Python 为 Azure Blob 存储中的目录生成 SAS token

azure - Powershell HTTP Post 到服务总线队列返回 401

node.js - 如何将 NodeJs 应用程序部署到 azure Web 应用程序

Azure 应用服务自动缩放无法缩小

Azure SAS token 授权资源类型不匹配