【问题标题】:Azure Server failed to authenticate the requestAzure 服务器未能对请求进行身份验证
【发布时间】:2020-01-29 13:26:08
【问题描述】:

我正在尝试使用 Jupyter Notebook 将 blob 上传到 Azure 存储。我有一个示例代码如下:

from azure.storage.blob import BlockBlobService

accountName = "< account name>"
ContainerSAS = "<SAS key>"
containerName = "< container name>"

try:
    sas_service = BlockBlobService(account_name=accountName, sas_token=ContainerSAS)
except Exception as e:
    print("There was an error during SAS service creation. Details: {0}".format(e))

from azure.storage.blob import ContentSettings

blobName = "< blob name >"
try:
    sas_service.create_blob_from_path(
       'accountName',
       'blobName',
       'Chicago_Crime_Data-v2.csv',
       content_settings=ContentSettings(content_type='Chicago_Crime_Data-v2/csv')
    )
except Exception as e:
    print("There was an error during blob uploading. Details: {0}".format(e))

但我收到一条错误消息:详细信息:服务器未能对请求进行身份验证。确保 Authorization 标头的值格式正确,包括签名。

我无法理解这里出了什么问题。我是新手。任何帮助将非常感激。谢谢。

编辑:我应该提供帐户名称、容器名称和密钥吗?

【问题讨论】:

  • 你能通过我的帖子解决问题吗?如果您仍有问题,请告诉我。

标签: python azure jupyter-notebook blob azure-blob-storage


【解决方案1】:

请确保按照此屏幕截图生成 sas 令牌:

sas_service.create_blob_from_path方法也有错误,第一个参数应该是container_name,而不是account_name

以下代码在我身边运行良好:

from azure.storage.blob import BlockBlobService, ContentSettings

accountName = "xxx"
ContainerSAS = "xxx"
containerName = "test4"

sas_service = BlockBlobService(account_name=accountName,sas_token=ContainerSAS)

blobname = "222.PNG"

sas_service.create_blob_from_path(containerName,blobname,"F:\\azure stack overflow\\2019\\09\\30\\disk.PNG")

print("done")

测试结果:

【讨论】:

  • 非常感谢@ivanyang csv 文件已上传,但存储资源管理器无法识别文件类型。知道如何纠正吗?
  • 谢谢@ivanyang 我已经解决了 csv 问题
【解决方案2】:

我的本​​地文件路径是“./rootfolder”,然后当它找到要上传的文件时,它会像 file="./rootfolder/folder/file.dcm"

然后我尝试批量上传该文件:

blob_client = blob_service_client.get_blob_client(container=container_name, blob=file)

然后我得到以下错误:

Azure 服务器未能对请求进行身份验证

和

AuthenticationErrorDetail:在 HTTP 请求“”中找到的 MAC 签名与任何计算的签名不同。服务器使用以下字符串进行签名:'PUT...

我发现您必须这样做,才能从文件路径中删除 ./。

file_path_on_azure = file_name.replace("./", "")
 
blob_client = blob_service_client.get_blob_client(container=container_name, blob=file_path_on_azure)

【讨论】:

    【解决方案3】:

    请确认您的帐号密钥是否正确,同时确保您的系统时间设置正确,如果您的系统时间设置不正确,您可能会收到“验证失败”错误。

    【讨论】:

    • 帐户密钥和系统时间看起来不错。代码有什么问题吗?
    猜你喜欢
    • 2014-09-19
    • 2016-04-04
    • 1970-01-01
    • 2016-01-31
    • 2015-11-28
    • 1970-01-01
    • 2021-08-23
    • 2016-11-18
    • 1970-01-01
    相关资源
    最近更新 更多