繁体   English   中英

Azure Blob存储生成无效的共享访问签名

[英]Azure Blob Storage Generates Invalid Shared Access Signature

我使用下面的代码示例为Azure Blob存储中存储的私有文件创建共享访问签名。 生成的Url有时有效,但由于身份验证错误,大部分时间都无效。

public async Task<string> GetFileUrl(string containerName, string fileName)
{    
     ICloudBlob blob = await GetBlob(containerName, fileName);

     string signature = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
     {
           SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
           SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7),
           Permissions = SharedAccessBlobPermissions.Read
     });

     return blob.Uri.AbsoluteUri + signature;
}

当形成的SAS无效时,我收到以下响应,

<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:</Message>
    <AuthenticationErrorDetail>Signature fields not well formed.</AuthenticationErrorDetail>
</Error>

以下是无法进行身份验证的URL的参数

sv=2016-05-31
sig=SbVzxo+dv28FvJP+Z9b1w6uvWUT72Pw1BSe3MIRooM0=
st=2017-03-30T11:52:35Z
se=2017-04-06T11:57:35Z
sr=b
sp=r

我发现了这个问题。 我没有提到问题,但生成SAS的代码是通过HTTTP客户端调用的,用于访问带有SAS的Blob的URL位于响应的Location头中。

我试图用它来检索URL

response.Headers.Location.ToString();

但是,我应该用过

response.Headers.Location.OriginalString.ToString();

根据Microsoft的说法, Location.ToString()返回规范的非转义形式的URI。 这就是为什么我的签名无效,里面有像+这样的字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM