【发布时间】:2020-01-15 16:10:23
【问题描述】:
我已经按照https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-app 创建了一个 AAD 应用程序。
为创建的 AAD 应用授予对 Azure 存储帐户的访问权限。
获取了客户端 ID 和客户端密码。
为了创建用户委托密钥和用户委托 sas,我使用了定义的方法和代码 https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-user-delegation-sas-create-dotnet.
(如文章中所述设置环境变量)。
我可以使用 GetUserDelegationSasBlob 方法生成用户委托密钥。
容器和 blob 文件是现有的。
现在我使用方法 ReadBlobWithSasAsync 使用上面生成的 SAS uri 读取 blob 的内容。
但是,我得到如下错误。
此请求无权使用此执行此操作 允许。 RequestId:5d127eaf-101e-00be-6666-6a3875000000
时间:2019-09-13T19:04:15.4109144Z
状态:403(此请求无权执行此操作 使用此权限。)
错误代码:AuthorizationPermissionMismatch
在另一种方法中,我使用 rest api 生成用户委托密钥。 https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key
我能够获取 xml 格式的用户授权密钥。 我正在按照中的步骤从中创建 SAS https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas
对于签名,我正在使用此代码,使用 StringToSign 和从委托密钥接收到的秘密值。
var encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(ToSign);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
String sig= Convert.ToBase64String(hashmessage);
}
我正在执行 GET 请求。 我尝试了各种参数值,例如,
sr: b 和 c sks:b和c sp: racwd 和 r 和 rw 等等
skv 和 sv 是 2018-11-09,因为创建用户委托密钥需要此版本。
但是 GET api 返回错误。
AuthenticationFailed服务器未能验证请求。确保 Authorization 标头的值正确形成,包括 签名。请求ID:e4bc8f0f-d01e-0046-7367-6af368000000 时间:2019-09-13T19:12:27.7780695Z 签名字段格式不正确。
【问题讨论】:
标签: azure azure-storage azure-blob-storage