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

PowerShell使用客户端密钥访问Azure WebApp提示缺失ID令牌未授权如何解决

Azure WebApp 客户端密钥访问报错「Missing id token. Unauthorized.」修复方案

根因说明

该报错是因为你的WebApp身份验证配置要求请求携带ID令牌,你当前的操作要么在获取令牌阶段没有拿到ID令牌,要么在调用接口时没有将ID令牌放到指定的请求头中。你当前获取到的authenticationToken只是App Service的会话令牌,没有包含所需的ID令牌。

修复步骤

步骤1:调整身份提供程序配置

  • 进入Azure门户对应WebApp资源页,打开「身份验证」菜单,找到你配置的身份提供程序(通常为Azure Active Directory)
  • 点击编辑该身份提供程序,确认已开启「令牌存储」选项,保存配置后等待生效

步骤2:修正令牌获取请求参数

获取令牌的请求必须携带openid scope,这是返回ID令牌的必要条件,PowerShell示例如下:

$tokenRequestParams = @{
    Uri = "https://login.microsoftonline.com/<你的租户ID>/oauth2/v2.0/token"
    Method = "POST"
    Body = @{
        client_id = "<客户端应用ID>"
        client_secret = "<客户端密钥>"
        grant_type = "client_credentials"
        scope = "openid profile <WebApp对应的客户端ID>/.default"
    }
}
$tokenResponse = Invoke-RestMethod @tokenRequestParams
# 此时$tokenResponse中会包含id_token字段,即为所需的ID令牌

步骤3:调整WebApp调用请求头

调用WebApp接口时,需要将ID令牌放入X-MS-TOKEN-AAD-ID-TOKEN请求头中,同时可以保留访问令牌作为Authorization头,示例如下:

$apiRequestHeaders = @{
    "X-MS-TOKEN-AAD-ID-TOKEN" = $tokenResponse.id_token
    "Authorization" = "Bearer $($tokenResponse.access_token)"
}
Invoke-RestMethod -Uri "<你的WebApp接口地址>" -Headers $apiRequestHeaders -Method Get

可选排查点

  • 如果你是通过App Service自带的/.auth/login/<提供程序>接口兑换令牌,需要在请求参数中添加response_type=id_token,确保返回结果包含ID令牌
  • 若你在WebApp身份验证规则中配置了自定义声明校验,需要确认你获取的ID令牌中包含对应的声明值,否则也会触发未授权错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:24:01