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

PowerShell生成Azure存储账户SAS令牌遇403认证错误求助

Azure存储账户SAS令牌生成403错误的解决方法

问题根源

你的脚本存在三个核心错误,导致签名字符串与Azure要求不匹配,触发403认证失败:

  • 变量名大小写错误:stringToSign末尾使用了未定义的$signedversion变量,实际应为$serviceVersion(PowerShell变量区分大小写)。
  • 换行符解析错误:双引号字符串中\n不会被PowerShell解析为换行符,导致签名字符串格式完全错误。
  • 签名未URL编码:生成的Base64签名包含+、/、=等URL特殊字符,直接拼接会破坏参数结构。

修正后的完整脚本

# Azure存储账户信息
$storageAccountName = "name"
$storageAccountKey = "key"
$baseUrl = "https://$storageAccountName.blob.core.windows.net"

# SAS令牌参数
$permissions = "rwdlacup"  # 权限:读、写、删除、列表、添加、创建、更新、处理
$serviceVersion = "2022-11-02"  # API版本
$expiryDate = "2024-12-13T22:41:13Z"  # 过期时间
$startDate = "2024-12-13T14:41:13Z"   # 生效时间
$signedServices = "bqtf"  # 服务:Blob、Queue、Table、File
$signedResourceTypes = "sco"  # 资源类型:服务、容器、对象
$signedIP = ""             # 无IP限制
$signedProtocol = "https"  # 仅允许HTTPS

# 生成符合要求的签名字符串(使用PowerShell原生换行符`n,修正变量名)
$stringToSign = "$storageAccountName`n$permissions`n$signedServices`n$signedResourceTypes`n$startDate`n$expiryDate`n$signedIP`n$signedProtocol`n$serviceVersion"

# 计算HMAC SHA-256签名
$hmac = New-Object System.Security.Cryptography.HMACSHA256
$hmac.Key = [Convert]::FromBase64String($storageAccountKey)
$sigBytes = $hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign))
$sig = [Convert]::ToBase64String($sigBytes)

# 对签名进行URL编码,避免特殊字符破坏参数
$encodedSig = [Uri]::EscapeDataString($sig)

# 拼接SAS令牌(修正URL拼接的斜杠问题)
$sasToken = "?sv=$serviceVersion&ss=$signedServices&srt=$signedResourceTypes&sp=$permissions&se=$expiryDate&st=$startDate&spr=$signedProtocol&sig=$encodedSig"

# 生成完整访问URL
$fullUrl = "$baseUrl$sasToken"

验证步骤

  1. 对比Azure门户生成的SAS参数(权限、服务类型、时间范围等),确保脚本中所有参数完全一致。
  2. 使用修正后的URL测试azcopy,确认无多余斜杠或编码错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:13:10