0

我正在调用generate_sas_token生成 SAS 令牌的 API,我将其附加到 url 的末尾以便能够访问它。我之前有它工作过,但后来我一直收到这个错误:

<Error> <Code> AuthenticationFailed </Code>
<Message>
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:ae350ec9-c01e-0010-06ca-257999000000
Time:2022-02-19T19:55:49.7901043Z
</Message>

<AuthenticationErrorDetail>
Signature did not match. String to sign used was rt

2022-02-19T21:55:49Z/blob/storage/files/someimage.jpg  

2020-10-02
b

添加了我的电话

def generate_sas_token(file_name, img_url):

    pattern = r'\bhttps:\/\/lenstorage.blob.core.windows.net\/files\/\b'
    file_name = re.sub(pattern,'', img_url)

    AZURE_ACC_NAME = settings.AZURE_ACCOUNT_NAME
    AZURE_PRIMARY_KEY = settings.AZURE_PRIMARY_KEY
    AZURE_CONTAINER = settings.AZURE_CONTAINER

    sas = generate_blob_sas(account_name=AZURE_ACC_NAME,
                            account_key=AZURE_PRIMARY_KEY,
                            container_name=AZURE_CONTAINER,
                            blob_name=file_name,
                            permission=BlobSasPermissions(read=True),
                            expiry=datetime.utcnow() + timedelta(hours=2))

    
    sas_url ='https://'+AZURE_ACC_NAME+'.blob.core.windows.net/'+AZURE_CONTAINER+'/'+file_name+'?'+sas

    return sas_url

经过几个小时的阅读,我做了以下事情:我确保两个资源都在同一个区域,并且两个服务器上的时间都相同。我检查了我所有的环境变量,它们都很好。我手动生成了一个令牌并将其附加到 url 以访问图像。我已经完成了天蓝色存储的配置,但需要一些指导来了解导致这种情况的原因,因为错误消息并没有提供太多信息。

建议后更新

我添加了开始时间并将其设置为过去 15 分钟,以防时间偏差。我还添加tag了良好措施的许可。

目的是确保所有参数/参数都正确并匹配,因为签名不匹配。

没运气!

谢谢各位高手!

4

1 回答 1

0

tl:博士

确保您file_name没有whitespace并检查您传递的所有参数的格式是否正确。


这个问题%20也被称为我天真whitespacefile_name Azure 会处理它或提供警告或错误。

我在 Azure Blob 存储 (file_name) 中的文件名结构是这样的:

targets/my name/logo/Logo-H.jpg

翻译为:

targets/my%20name/logo/Logo-H.jpg

纯粹是我的错误和疏忽,但我认为 Azure 会为此提供某种类型的捕获/处理。我从 URL 中删除了空格并替换为-导致..

targets/my-name/logo/Logo-H.jpg
于 2022-02-20T12:19:26.097 回答