如何通过托管标识生成存储账户级别的SAS Token?
生成Azure存储账户级别的用户委托SAS Token(解决403认证失败问题)
问题背景
原有代码可正常生成指定Blob的用户委托SAS Token,但尝试修改为生成存储账户级别SAS时,出现403认证失败错误,错误信息如下:
<?xml version="1.0" encoding="utf-8"?> <Error> <Code>Authentication failed</Code> <Message> The server could not authenticate the request. Make sure the authorization header value is correctly formed, including the signature. Request ID: f100b2a0-501e-0038-06dd-cb612f000000 Time:2023-08-10T22:53:59.3204012Z</Message> </Error>
问题原因
生成账户级别的用户委托SAS不能使用BlobSasBuilder,该类仅适用于容器或Blob级别的SAS。账户级别SAS需要使用AccountSasBuilder,同时要正确配置服务类型、资源类型和权限参数。
修正后的代码
以下是可生成存储账户级别用户委托SAS Token的完整代码:
[HttpGet] public IActionResult GetAccountLevelSasToken() { var storageAccountName = "storage-Name"; var saUri = $"https://{storageAccountName}.blob.core.windows.net"; // 使用Azure AD凭据创建Blob服务客户端 var blobServiceClient = new BlobServiceClient(new Uri(saUri), new DefaultAzureCredential()); // 获取有效期2小时的用户委托密钥 var userDelegationKey = blobServiceClient.GetUserDelegationKey( DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddHours(2)); // 初始化账户SAS构建器 var accountSasBuilder = new AccountSasBuilder() { // 指定服务类型:仅Blob服务 Services = AccountSasServices.Blobs, // 指定可访问的资源类型:容器和Blob ResourceTypes = AccountSasResourceTypes.Container | AccountSasResourceTypes.Object, // SAS生效时间 StartsOn = DateTimeOffset.UtcNow, // SAS过期时间 ExpiresOn = DateTimeOffset.UtcNow.AddHours(2), // 指定账户级别SAS的权限:此处设置为读取 Permissions = AccountSasPermissions.Read }; // 生成SAS查询参数 var sasToken = accountSasBuilder.ToSasQueryParameters(userDelegationKey, storageAccountName).ToString(); // 拼接存储账户URL和SAS Token var accountUrlWithSas = $"{saUri}?{sasToken}"; return Ok(new { AccountUrlWithSas = accountUrlWithSas }); }
关键说明
- AccountSasBuilder:专门用于构建账户级别的SAS Token,需配置
Services(指定生效的存储服务,这里只选Blob)、ResourceTypes(指定可访问的资源层级,容器和对象)和Permissions(账户级别的权限集合)。 - 用户委托密钥:依然使用
GetUserDelegationKey获取,该密钥用于签署账户级别的用户委托SAS。 - URL格式:生成的账户级别SAS URL格式为
https://{storageAccountName}.blob.core.windows.net?{SasToken},可用于访问该存储账户下Blob服务的所有容器和Blob(受权限限制)。
内容的提问来源于stack exchange,提问作者Jorge Fuentes
相关产品推荐
相关产品推荐

