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

获取Microsoft Graph Access Token时遇AADSTS90014错误求助

解决Microsoft Graph API获取Access Token时的AADSTS90014错误

这个错误提示已经说得很清楚——你的POST请求体里缺少必填的grant_type参数,这是OAuth 2.0授权码流程里必须提交的核心参数。针对你用授权码换取Access Token的场景,grant_type的值要固定设为authorization_code。

我帮你修正了POST请求代码,补上了缺失的参数,同时确保所有必要参数都正确传递:

<?php
$clientId = "XXXXXXXXX-ded0-4150-80c6-37e326ff6b26";
$clientSecret = "XXXXXXXXXXuakCZYA701@#!";
$redirectUri = "你的回调地址(需和Azure AD配置的完全一致)";
$authorizationCode = "你实际获取到的授权码"; // 替换成真实授权码

// 构建完整的POST请求参数
$postData = [
    'grant_type' => 'authorization_code', // 必须添加的核心参数
    'client_id' => $clientId,
    'client_secret' => $clientSecret,
    'code' => $authorizationCode,
    'redirect_uri' => $redirectUri
];

// 初始化cURL请求
$ch = curl_init('https://login.microsoftonline.com/common/oauth2/v2.0/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); // 用表单编码格式发送
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded'
]);

// 执行请求并处理响应
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'cURL请求错误: ' . curl_error($ch);
} else {
    $tokenData = json_decode($response, true);
    if (isset($tokenData['access_token'])) {
        echo 'Access Token获取成功: ' . $tokenData['access_token'];
    } else {
        echo '请求失败: ' . $response;
    }
}
curl_close($ch);
?>

另外还有几个关键细节需要你核对:

  • redirect_uri必须完全匹配:和你在Azure AD应用注册里配置的"重定向URI"完全一致,包括大小写、是否带结尾斜杠等,哪怕细微差异都会触发错误。
  • 参数编码格式:必须用application/x-www-form-urlencoded格式发送(代码里用http_build_query处理了参数),不能用JSON格式,否则微软授权服务器无法解析。
  • 授权码的有效性:授权码只能使用一次,用过即失效,确保你用的是刚获取的有效授权码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:54:23