You need to enable JavaScript to run this app. PHP传入变量存储的Azure访问令牌到cURL请求头报无效令牌的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

PHP传入变量存储的Azure访问令牌到cURL请求头报无效令牌的解决方法

问题根因与修正方案

你遇到的“访问令牌无效”报错,绝大多数情况是请求头拼接的PHP语法错误导致的,并非Azure端的验证逻辑问题。

核心错误定位

你当前写的请求头代码存在明显语法缺陷,根本无法生成符合OAuth2规范的认证头:

// 你写的错误代码
CURLOPT_HTTPHEADER => array(
  'Authorization: Bearer '$token'
)
  • 第一,PHP中单引号包裹的字符串和变量拼接必须使用 . 作为连接符,不能直接相邻书写,当前写法会直接触发PHP语法解析错误
  • 第二,单引号没有完成闭合,最终发出去的Authorization头是残缺的,Azure收到的内容格式完全不符合认证规范,自然会判定令牌无效。

正确的传参写法

有三种经过验证的稳定写法,选任意一种都可以:

  • 双引号包裹变量(最不容易写错):
    CURLOPT_HTTPHEADER => array(
      "Authorization: Bearer {$token}"
    )
    
  • 显式用连接符拼接:
    CURLOPT_HTTPHEADER => array(
      'Authorization: Bearer ' . $token
    )
    
  • 用sprintf格式化生成(适合长期复用,容错率最高):
    $authHeader = sprintf('Authorization: Bearer %s', $token);
    // 后续所有Azure接口请求直接复用这个头即可
    CURLOPT_HTTPHEADER => array(
      $authHeader
    )
    

格式校验要求:拼接完成的请求头必须满足 Authorization: Bearer <令牌内容> 的结构,Bearer和令牌之间必须留一个空格,不能带多余的引号、换行符、转义字符。

改完语法后仍报错的排查方向

如果修正拼接问题后还是返回令牌无效,按顺序核对:

  • 检查$token变量是否有实际值:可以在发请求前加一行 var_dump($token); exit; 确认,避免JSON解析失败传了空字符串
  • 核对获取令牌时传的resource参数:你当前传的是https://management.azure.com/,和资源管理接口的要求是匹配的,如果后续换其他Azure接口,必须保证resource值和接口要求的受众完全一致,差一个末尾斜杠都会触发验签失败
  • 检查服务主体权限:如果给应用注册的服务主体没有给对应订阅分配至少Reader角色,Azure返回的报错信息会和令牌无效高度相似,容易混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 21:36:04