You need to enable JavaScript to run this app. 携带Bearer Token调用受Azure AD保护API返回401的PowerShell Runbook问题
优惠活动
大模型
产品
解决方案
定价
更多

携带Bearer Token调用受Azure AD保护API返回401的PowerShell Runbook问题

排查与修正方案

代码层硬错误修正

  • 拼写与语法问题
    • ADAL类命名空间拼写错误:Micorsoft.IdentityModel.Clients.ActiveDirectory 正确为 Microsoft.IdentityModel.Clients.ActiveDirectory
    • 两处New-Object调用的字符串未闭合,参数名argumentlsit拼写错误(正确值为argumentlist)
    • 代码引用的$ClientId变量无前置赋值
  • 请求头构造错误
    现有请求头写法存在两处不符合OAuth2.0规范的问题:
    1. Authorization值外层包裹多余圆括号,格式非法
    2. 双引号字符串内直接访问对象属性时,PowerShell仅解析根变量$ResultToken,.AccessToken会被识别为普通文本,无法正确拼接完整令牌。必须通过$()子表达式包裹属性访问逻辑
      错误写法:@{"Authorization"="(Bearer $ResultToken.AccessToken)"}
      正确写法:@{"Authorization"="Bearer $($ResultToken.AccessToken)"}
  • 令牌受众不匹配
    现有代码获取令牌时传入的资源参数为https://graph.microsoft.com(Graph API标识),但调用目标是自定义部署的后端API。Azure AD签发的访问令牌与aud(受众)字段强绑定,Graph标识的令牌无法通过自定义API的身份校验。必须将获取令牌的资源参数替换为自定义API在应用注册中配置的应用ID URI(通常格式为api://<应用客户端ID>)。

配置层校验项

  • 确认取令牌所用的服务主体(对应ClientId的应用注册),已在自定义API的应用注册中被分配对应应用权限,且已完成租户级管理员同意
  • 确认API端Azure AD认证逻辑的校验参数(受众、发行者地址)与取令牌时传入的参数完全一致
  • 若脚本运行在Azure Runbook环境,优先使用内置托管身份能力替代手动ADAL实现:通过Connect-AzAccount -Identity完成登录后,调用Get-AzAccessToken -ResourceUrl "<自定义API的应用ID URI>"直接获取对应令牌,规避手动加载ADAL程序集、版本不兼容等隐藏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 23:24:03