问题描述
有人可以帮助我吗?在存储模拟器中使用SAS令牌访问blob容器时遇到错误-
服务器无法验证请求。确保包括签名在内的Authorization标头的值正确形成
System.AggregateException:发生一个或多个错误。 (服务器失败 验证请求。确保授权值 标头格式正确,包括签名。 RequestId:c3d554bf-ae0c-413d-ba15-ef888f141864 时间:2020-08-19T08:18:01.6796671Z状态:403(服务器失败 验证请求。确保授权标头的值 包括签名在内的格式正确。)ErrorCode: 验证失败
标头:服务器:Microsoft-HTTPAPI / 2.0 x-ms-request-id: c3d554bf-ae0c-413d-ba15-ef888f141864 X-MS-错误代码: 身份验证失败日期:2020年8月19日,星期三,格林尼治标准时间 内容长度:498内容类型:application / xml **
预期行为是什么?
以下是“异常”或“堆栈跟踪”详细信息- ---> Azure.RequestFailedException:服务器无法验证请求。确保形成了Authorization标头的值 正确包含签名。 RequestId:0b506bfc-ba50-4519-924f-6072c5ba829d 时间:2020-08-19T08:47:57.3367759Z状态:403(服务器无法 验证请求。确保授权标头的值 包括签名在内的格式正确。)ErrorCode: 验证失败
标头:服务器:Microsoft-HTTPAPI / 2.0 x-ms-request-id: 0b506bfc-ba50-4519-924f-6072c5ba829d x-ms-错误代码: 身份验证失败日期:2020年8月19日星期三08:47:57 GMT 内容长度:498内容类型:application / xml
在 Azure.Storage.Blobs.BlobRestClient.Service.GetPropertiesAsync_CreateResponse(ClientDiagnostics clientDiagnostics,响应响应)在 Azure.Storage.Blobs.BlobRestClient.Service.GetPropertiesAsync(ClientDiagnostics clientDiagnostics,HttpPipeline管道,Uri resourceUri,字符串 版本,Nullable`1超时,字符串requestId,布尔异步,字符串 operationName,CancellationToken cancelToken)在 Azure.Storage.Blobs.BlobServiceClient.GetPropertiesInternal(Boolean 异步,在 Azure.Storage.Blobs.BlobServiceClient.GetPropertiesAsync(CancellationToken cancelToken)
下面是要复制的代码-
BlobSasBuilder sasBuilder = new BlobSasBuilder {
BlobContainerName = "myTestContainer",Resource = "c",//StartsOn = DateTimeOffset.UtcNow,//ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
ExpiresOn = DateTimeOffset.MaxValue
};
//Allow read access
sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
StorageSharedKeyCredential credential =
new StorageSharedKeyCredential("Eby8vdM02xNOcqFlqUwjpllmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==","devstoreaccount1");
// Use the key to get the SAS token.
string sasToken = sasBuilder.ToSasQueryParameters(credential).ToString();
Console.WriteLine("SAS for blob container is: {0}",sasToken);
Console.WriteLine();
// Build a SAS URI
UriBuilder sasUri = new UriBuilder(containerClient.Uri);
sasUri.Query = sasToken;
// Create a client that can authenticate with the SAS URI
BlobServiceClient service = new BlobServiceClient(sasUri.Uri);
// Make a service request to verify we've successfully authenticated
await service.GetPropertiesAsync(); //Note - Receiving above error while calling this function
解决方法
请更改
StorageSharedKeyCredential credential =
new StorageSharedKeyCredential("Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==","devstoreaccount1");
到
StorageSharedKeyCredential credential =
new StorageSharedKeyCredential("devstoreaccount1","Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==");