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

生成aeg-sas-token的密钥是什么?EventGrid示例代码未指明有效密钥

生成AEG-SAS-Token的核心要点及密钥定位问题

我之前在调试Event Grid的SAS令牌时也踩过一模一样的坑,特别理解你找不到正确密钥、用了访问密钥却无效的困惑。下面给你拆解关键要点和可能的问题:

生成AEG-SAS-Token的核心关键

  • 必须使用对应Event Grid主题/域的访问密钥:这是最核心的前提,AEG-SAS-Token不通用其他Azure服务的密钥,甚至不能用Event Grid命名空间的密钥,必须是你要推送事件的具体主题/域的访问密钥(密钥1或密钥2都可以)。
  • 精确匹配资源URI:签名时的资源URI必须是主题的完整端点(比如https://<your-topic-name>.eastus.eventgrid.azure.net/api/events),路径、区域、名称都不能错,而且要做URL编码后再参与签名。
  • 完整的令牌参数:生成的令牌必须包含四个核心参数:
    • sr:编码后的主题端点
    • sig:HMAC-SHA256算法生成的签名
    • se:UTC时区的Unix过期时间戳(秒)
    • skn:你使用的密钥名称(key1或key2),这个参数很容易被忽略,但少了它服务端会无法验证签名。

为什么你用Event Grid访问密钥无效?

大概率是这几个细节没做对:

  1. 用错了密钥来源:别去Event Grid命名空间或者其他关联服务里找密钥,要直接进入你目标主题的Azure门户页面,在“访问密钥”选项卡下复制密钥1或密钥2。
  2. 资源URI不完整:很多人会省略端点的/api/events路径,或者写错区域/主题名称,这会导致签名不匹配,令牌直接失效。
  3. 遗漏了skn参数:官方示例里可能有些场景没明确写这个参数,但实际使用时必须加上,否则服务端不知道你用的是哪个密钥进行签名,自然验证失败。

快速验证的示例(PowerShell)

给你一个能直接跑的示例,替换成你的主题信息就能生成有效令牌:

# 替换成你的主题端点和访问密钥
$topicEndpoint = "https://your-topic-name.eastus.eventgrid.azure.net/api/events"
$accessKey = "your-topic-access-key-here"
# 设置令牌1小时后过期
$expirationTime = (Get-Date).AddHours(1).ToUniversalTime()
$expirationEpoch = [Math]::Floor((New-TimeSpan -Start (Get-Date "1970-01-01") -End $expirationTime).TotalSeconds)

# 生成签名字符串
$encodedEndpoint = [System.Web.HttpUtility]::UrlEncode($topicEndpoint)
$stringToSign = $encodedEndpoint + "`n" + $expirationEpoch

# 计算HMAC-SHA256签名
$hmac = New-Object System.Security.Cryptography.HMACSHA256
$hmac.Key = [Text.Encoding]::UTF8.GetBytes($accessKey)
$signature = [System.Convert]::ToBase64String($hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign)))

# 组装完整的SAS令牌
$sasToken = "sr=$encodedEndpoint&sig=$([System.Web.HttpUtility]::UrlEncode($signature))&se=$expirationEpoch&skn=key1"

你可以按照这个逻辑检查你的代码,重点确认密钥来源、URI完整性和skn参数这三个点,应该就能解决问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:06:01