You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#通过账户密钥获取Blob存储SAS令牌并改写代码

基于账户密钥生成Blob存储SAS令牌(C#实现)

需求说明

需要在C#中通过账户密钥生成具备读、写、删除等完整权限的Blob存储SAS令牌,替代原本基于用户委托(User Delegation)的实现方案,且无法使用用户委托方式。

实现代码

public async Task<string> GetBlobSASToken(string containerName)
{
    _logger.LogInformation($"Initial Load Worker called Blob SAS Token creation.");
    try
    {
        DbConnectionStringBuilder dbConnectionStringBuilder = new DbConnectionStringBuilder();
        dbConnectionStringBuilder.ConnectionString = _config.BlobStorageConnectionString;

        var azureStorageAccount = dbConnectionStringBuilder["AccountName"].ToString();
        var azureStorageAccessKey = dbConnectionStringBuilder["AccountKey"].ToString();

        Azure.Storage.Sas.BlobSasBuilder blobSasBuilder = new Azure.Storage.Sas.BlobSasBuilder()
        {
            BlobContainerName = containerName,
            Protocol = SasProtocol.Https, // 仅允许HTTPS访问,提升安全性
            Resource = "c", // 指定为容器级SAS("c"代表container)
            StartsOn = DateTimeOffset.UtcNow.AddDays(-1), // 提前1天生效,避免时区同步问题
            ExpiresOn = DateTimeOffset.UtcNow.AddDays(3), // SAS令牌3天后过期
        };
        // 配置容器级SAS的全量操作权限
        blobSasBuilder.SetPermissions(
            Azure.Storage.Sas.BlobSasPermissions.Read |
            Azure.Storage.Sas.BlobSasPermissions.Add |
            Azure.Storage.Sas.BlobSasPermissions.Create |
            Azure.Storage.Sas.BlobSasPermissions.Write |
            Azure.Storage.Sas.BlobSasPermissions.Delete |
            Azure.Storage.Sas.BlobSasPermissions.List |
            Azure.Storage.Sas.BlobSasPermissions.SetImmutabilityPolicy
            );

        // 使用账户密钥生成SAS令牌
        var sasToken = blobSasBuilder.ToSasQueryParameters(new StorageSharedKeyCredential(azureStorageAccount,
            azureStorageAccessKey)).ToString();

        return sasToken;
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, $"Initial Load Worker has error when creating a SAS token for Initial Load Worker.");
        throw;
    }
}

关键说明

  • 账户信息解析:通过DbConnectionStringBuilder自动从存储连接字符串中提取账户名和密钥,避免手动拆分字符串的出错风险。
  • SAS参数配置:
    • Resource = "c":生成容器级SAS,可对目标容器内的所有Blob执行权限范围内的操作;若需生成单个Blob的SAS,可改为Resource = "b"并添加BlobName属性。
    • 时间范围设置:StartsOn提前1天生效是为了规避客户端与服务器的时间同步误差,确保令牌能及时使用。
  • 权限控制:按需组合BlobSasPermissions枚举值,可根据业务需求增减权限项,最小化权限范围以提升安全性。

内容的提问来源于stack exchange,提问作者Chaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:35:21